python用字典统计单词出现次数_python - 如何使用字典理解来计算文档中每个单词的出现次数...
我有一个用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 - 如何使用字典理解来计算文档中每个单词的出现次数...相关推荐
- 计算文档中不同单词出现的次数
一个很想去的外企的笔试题目:一个txt文件中存有若干行,每行有若干单词,计算每个单词出现的次数. 分析:1.将文本从txt中取出来,按空格和换行分隔成一个单词的list 2.new一个hashma ...
- 散列表(上):Word文档中的单词拼写检查功能是如何实现的?
[思考题]:在Word里面输入一个错误的英文单词,它会用标红的方式提示"拼写错误".Word的这个单词拼写检查功能,虽然很小但是却非常实用.你有没有想过,这个功能是如何实现的? 1 ...
- html5多个图片位置_Python使用标准库zipfile提取docx文档中所有图片
清华科技大讲堂免费直播课预告: 免费直播课|Python数据可视化与科学计算可视化案例分享,5月28日晚20:00-21:30============ 哔哩哔哩网站免费视频观看地址: 董老师在哔哩哔哩 ...
- 【散列表(哈希表) Hash Table(上)】:Word文档中的单词拼写检查功能是如何实现的?
Word 这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在 Word 里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误".Word 的这个 ...
- 列表根据下标取值_散列表(上):Word文档中的单词拼写检查功能是如何实现的?...
Word这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在Word里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误".Word的这个单词拼写 ...
- 18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?
问题引入 在 Word 里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误",Word 文本编辑器的拼写检查功能是如何实现的呢?散列表(Hash Table) 散列表 散列 ...
- python123字典统计排序1省份_python 列表、字典多排序问题
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/justin051/article/de ...
- python数据按照分组进行频数_Pandas:按两列分组并计算第二列中所有值的出现次数...
我相信您需要先替换所有值>=6,然后再替换groupby+aggregatesum:s = df['num ofcust'].mask(df['num ofcust'] >=6, '6+' ...
- 18散列表(上):Word文档中的单词拼写检查功能是如何实现的
文章目录 1.散列思想 2. 散列函数 3. 散列冲突 4. 解答开篇 问题:Word的这个单词拼写检查功能是如何实现的? 1.散列思想 散列表:Hash table. **散列表利用数组支持按照下标 ...
最新文章
- 斯坦福的智能马桶能凭肛纹识人,大便和尿液都把你的信息“卖”了……
- js进阶 12-8 如何知道鼠标和键盘当前操作的是哪个键
- mysql5.7.19设置_MySQL5.7.19安装配置
- 查看oracle压力,一个很简单测试oracle压力方法
- python判断列表是否为空_Jinja2: 判断返回的列表是否为空
- visio画uml类图添加自定义数据类型
- oracle之单行函数之多表查询值之课后练习
- qchart 坐标轴设置_「Qt」利用QChart实现实时动态的曲线数据展示
- mw150um 驱动程序win10_水星MW150UM无线网卡驱动下载-水星MW150UM 1.0无线网卡驱动官方版下载[电脑版]-华军软件园...
- 你知道怎么下载矢量图标吗——Iconfont
- OCR文字识别方法综述
- js function
- Java生成桌面快捷方式(字节流生成)
- 中国计算机设计大赛蔡思琦,建策杯2018年江苏省大学生计算机设计大赛.PDF
- 详解AUTOSAR:什么是AUTOSAR?(理论篇—1)
- matlab把图像进行网格化,或者是在图像中画网格
- HTTP性能极限优化
- SQL 中条件、循环语句的应用整理
- Gym实践(一)——环境安装
- 爬虫获取的数据和在自己浏览器看到的不一样