我有一个用python编写的列表,其中充满了文本。就像每个文档中的固定单词。所以对于每个文档,我都有一个列表,然后在列表中列出所有文档。

所有列表只包含唯一的单词。我的目的是计算完整文档中每个单词的出现次数。我可以使用以下代码成功完成此操作:for x in texts_list:

for l in x:

if l in term_appearance:

term_appearance[l] += 1

else:

term_appearance[l] = 1

但我想用字典理解来做同样的事情。这是我第一次尝试编写字典理解,并使用StackOverflow中以前的现有文章,我能够编写以下内容:

from collections import defaultdict

term_appearance = defaultdict(int)

{{term_appearance[l] : term_appearance[l] + 1 if l else term_appearance[l] : 1 for l in x} for x in texts_list}

上一篇参考文章:

Simple syntax error in Python if else dict comprehension

如上所述,我还使用了以下代码:

{{l : term_appearance[l] + 1 if l else 1 for l in x} for x in texts_list}

上面的代码成功地生成了空列表,但最终抛出了以下跟踪:

[]

[]

[]

[]

Traceback (most recent call last):

File "term_count_fltr.py", line 28, in

{{l : term_appearance[l] + 1 if l else 1 for l in x} for x in texts_list}

File "term_count_fltr.py", line 28, in

{{l : term_appearance[l] + 1 if l else 1 for l in x} for x in texts_list}

TypeError: unhashable type: 'dict'

如果能帮助我提高目前的理解力,我将不胜感激。

看到上面的错误,我也试过了

[{l : term_appearance[l] + 1 if l else 1 for l in x} for x in texts_list]

运行时没有任何错误,但输出仅为空列表。

最佳答案

就像其他答案中解释的那样,问题是字典理解创建了一个新的字典,所以直到新字典被创建之后,您才可以得到它的引用。你不能对你正在做的事进行字典理解。

鉴于此,您所做的就是尝试重新实现collections.Counter已经完成的工作。您只需使用Counter。示例-from collections import Counter

term_appearance = Counter()

for x in texts_list:

term_appearance.update(x)

演示-

>>> l = [[1,2,3],[2,3,1],[5,4,2],[1,1,3]]

>>> from collections import Counter

>>> term_appearance = Counter()

>>> for x in l:

... term_appearance.update(x)

...

>>> term_appearance

Counter({1: 4, 2: 3, 3: 3, 4: 1, 5: 1})

如果你真的想在某种程度上理解这一点,你可以做到:

from collections import Counter

term_appearance = Counter()

[term_appearance.update(x) for x in texts_list]

演示-

>>> l = [[1,2,3],[2,3,1],[5,4,2],[1,1,3]]

>>> from collections import Counter

>>> term_appearance = Counter()

>>> [term_appearance.update(x) for x in l]

[None, None, None, None]

>>> term_appearance

Counter({1: 4, 2: 3, 3: 3, 4: 1, 5: 1})

输出[None, None, None, None]来自导致该列表的列表理解(因为它是以交互方式运行的),如果在脚本中以python

还可以使用itertools.chain.from_iterable()从文本列表创建扁平列表,然后将其用于计数器。例子:

from collections import Counter

from itertools import chain

term_appearance = Counter(chain.from_iterable(texts_list))

演示-

>>> from collections import Counter

>>> from itertools import chain

>>> term_appearance = Counter(chain.from_iterable(l))

>>> term_appearance

Counter({1: 4, 2: 3, 3: 3, 4: 1, 5: 1})

另外,在您的原始代码行中的另一个问题-

{{term_appearance[l] : term_appearance[l] + 1 if l else term_appearance[l] : 1 for l in x} for x in texts_list}

这实际上是一个集合理解,其中嵌套了一个字典理解。

这就是您得到错误的原因-TypeError: unhashable type: 'dict'。因为在第一次运行字典理解并创建一个dict之后,它试图将其添加到set中。但是字典是不可散列的,因此出现了错误。

python用字典统计单词出现次数_python - 如何使用字典理解来计算文档中每个单词的出现次数...相关推荐

  1. 计算文档中不同单词出现的次数

    一个很想去的外企的笔试题目:一个txt文件中存有若干行,每行有若干单词,计算每个单词出现的次数.   分析:1.将文本从txt中取出来,按空格和换行分隔成一个单词的list 2.new一个hashma ...

  2. 散列表(上):Word文档中的单词拼写检查功能是如何实现的?

    [思考题]:在Word里面输入一个错误的英文单词,它会用标红的方式提示"拼写错误".Word的这个单词拼写检查功能,虽然很小但是却非常实用.你有没有想过,这个功能是如何实现的? 1 ...

  3. html5多个图片位置_Python使用标准库zipfile提取docx文档中所有图片

    清华科技大讲堂免费直播课预告: 免费直播课|Python数据可视化与科学计算可视化案例分享,5月28日晚20:00-21:30============ 哔哩哔哩网站免费视频观看地址: 董老师在哔哩哔哩 ...

  4. 【散列表(哈希表) Hash Table(上)】:Word文档中的单词拼写检查功能是如何实现的?

    Word 这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在 Word 里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误".Word 的这个 ...

  5. 列表根据下标取值_散列表(上):Word文档中的单词拼写检查功能是如何实现的?...

    Word这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在Word里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误".Word的这个单词拼写 ...

  6. 18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?

    问题引入 在 Word 里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误",Word 文本编辑器的拼写检查功能是如何实现的呢?散列表(Hash Table) 散列表 散列 ...

  7. python123字典统计排序1省份_python 列表、字典多排序问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/justin051/article/de ...

  8. python数据按照分组进行频数_Pandas:按两列分组并计算第二列中所有值的出现次数...

    我相信您需要先替换所有值>=6,然后再替换groupby+aggregatesum:s = df['num ofcust'].mask(df['num ofcust'] >=6, '6+' ...

  9. 18散列表(上):Word文档中的单词拼写检查功能是如何实现的

    文章目录 1.散列思想 2. 散列函数 3. 散列冲突 4. 解答开篇 问题:Word的这个单词拼写检查功能是如何实现的? 1.散列思想 散列表:Hash table. **散列表利用数组支持按照下标 ...

最新文章

  1. 斯坦福的智能马桶能凭肛纹识人,大便和尿液都把你的信息“卖”了……
  2. js进阶 12-8 如何知道鼠标和键盘当前操作的是哪个键
  3. mysql5.7.19设置_MySQL5.7.19安装配置
  4. 查看oracle压力,一个很简单测试oracle压力方法
  5. python判断列表是否为空_Jinja2: 判断返回的列表是否为空
  6. visio画uml类图添加自定义数据类型
  7. oracle之单行函数之多表查询值之课后练习
  8. qchart 坐标轴设置_「Qt」利用QChart实现实时动态的曲线数据展示
  9. mw150um 驱动程序win10_水星MW150UM无线网卡驱动下载-水星MW150UM 1.0无线网卡驱动官方版下载[电脑版]-华军软件园...
  10. 你知道怎么下载矢量图标吗——Iconfont
  11. OCR文字识别方法综述
  12. js function
  13. Java生成桌面快捷方式(字节流生成)
  14. 中国计算机设计大赛蔡思琦,建策杯2018年江苏省大学生计算机设计大赛.PDF
  15. 详解AUTOSAR:什么是AUTOSAR?(理论篇—1)
  16. matlab把图像进行网格化,或者是在图像中画网格
  17. HTTP性能极限优化
  18. SQL 中条件、循环语句的应用整理
  19. Gym实践(一)——环境安装
  20. 爬虫获取的数据和在自己浏览器看到的不一样

热门文章

  1. 使用python在ArcGIS中合并多个图层中的数据
  2. 如何配置jdk的本地环境
  3. Python 直接赋值、浅拷贝和深度拷贝全解析
  4. centos7 安装sqlserver驱动以及扩展
  5. 常见MIME类型例表
  6. oracle数据管理员常用词语,总结Oracle数据库管理员的常用命令
  7. DelayQueue1.8源码
  8. h5分线程Worker
  9. 第一篇 多线程笔试面试题汇总(转)
  10. 主定理(Master Theorem)与时间复杂度