python - 字典仅返回 for 循环内的最后一个键值对
问题描述
我有一个字符串列表:
A = [
'philadelphia court excessive disappointed court hope hope',
'hope hope jurisdiction obscures acquittal court',
'mention hope maryland signal held mention problem internal reform life bolster level grievance'
]
和另一个列表:
B = ['court', 'hope', 'mention', 'life', 'bolster', 'internal', 'level']
B
我想根据字符串列表中列表单词的出现次数创建字典A
。就像是,
C = [
{'count':2,'hope':2,'mention':0,'life':0,'bolster':0,'internal':0,'level':0},
{'count':1,'hope':2,'mention':0,'life':0,'bolster':0,'internal':0,'level':0},
{'count':0,'hope':1,'mention':2,'life':1,'bolster':1,'internal':1,'level':1}
]
我喜欢的,
dic={}
for i in A:
t=i.split()
for j in B:
dic[j]=t.count(j)
但是,它只返回最后一对字典,
print (dic)
{'court': 0,
'hope': 1,
'mention': 2,
'life': 1,
'bolster': 1,
'internal': 1,
'level': 1}
解决方案
您无需像示例输出中那样创建字典列表,而是仅创建一个字典(并在每次检查短语时覆盖字数)。您可以使用re.findall
来计算每个短语中出现的单词(如果您的任何短语包含后跟标点符号的单词,例如“希望?”,这具有不会失败的好处)。
import re
words = ['court', 'hope', 'mention', 'life', 'bolster', 'internal', 'level']
phrases = ['philadelphia court excessive disappointed court hope hope','hope hope jurisdiction obscures acquittal court','mention hope maryland signal held mention problem internal reform life bolster level grievance']
counts = [{w: len(re.findall(r'\b{}\b'.format(w), p)) for w in words} for p in phrases]
print(counts)
# [{'court': 2, 'hope': 2, 'mention': 0, 'life': 0, 'bolster': 0, 'internal': 0, 'level': 0}, {'court': 1, 'hope': 2, 'mention': 0, 'life': 0, 'bolster': 0, 'internal': 0, 'level': 0}, {'court': 0, 'hope': 1, 'mention': 2, 'life': 1, 'bolster': 1, 'internal': 1, 'level': 1}]
推荐阅读
- php - PHP:为什么我的变量在我将它们包含在请求语句中后不可用?
- javascript - 无法使用formdata将文件发送到rails后端的ruby
- loops - 从函数/模块中提取 llvm 位码中的循环
- php - Laravel:试图获取非对象的属性“符号”
- angular - Angular 7 Reactive forms“具有未指定名称属性的表单控件没有值访问器”
- docker - kubeadm init [恐慌:分配给 nil 映射中的条目]
- angular - 将 CSS 类应用于组件标签
- python - Keras/Tensorflow中dropout的动态切换
- powershell - 如何调用 Jenkins API 并使用 powershell 发送自定义参数
- sql - 行聚合的案例语句