计算字典中列表中单词的频率
Count frequency of words inside a list in a dictionary
我有一个常用关键字列表:
common_keywords = ['dog', 'person', 'cat']
还有一个字典列表,其中包含关键字,有时还包含上面列出的 common_keywords
:
people = [{'name':'Bob', 'keywords': ['dog', 'dog', 'car', 'trampoline']},
{'name':'Kate', 'keywords': ['cat', 'jog', 'tree', 'flower']},
{'name':'Sasha', 'keywords': ['cooking', 'stove', 'person', 'cat']}]
我想计算每个人 common_keywords
的频率,因此所需的输出看起来像:
counts = [{'name': 'Bob', 'counts': [{'dog': 2}]},
{'name': 'Kate', 'counts': [{'cat': 1}]},
{'name': 'Sasha', 'counts': [{'person':1}, {'cat': 1}]]
我可以使用 dict(Counter())
来计算关键字并过滤它们(如果它们出现在 common_keywords
中,但我正在努力将这些计数链接回所需的原始名称输出:counts
.
当前代码(我想我正在慢慢到达那里):
freq_dict = {}
for p in people:
name = p['name']
for c in p['keywords']:
if c not in freq_dict:
freq_dict[name] = {c: 1}
else:
if c not in freq_dict[name]:
freq_dict[c] = 1
else:
freq_dict[c] +=1
您可以将列表推导与 collections.Counter
一起使用,它完全符合您对嵌套列表的要求。 -
from collections import Counter
[{'name':i.get('name'),
'keywords':[dict(Counter([j for j in i.get('keywords')
if j in common_keywords]))]} for i in people]
[{'name': 'Bob', 'keywords': [{'dog': 2}]},
{'name': 'Kate', 'keywords': [{'cat': 1}]},
{'name': 'Sasha', 'keywords': [{'person': 1, 'cat': 1}]}]
- 首先,通过列表推导,您想要重建原始的字典列表,其中的键与
i.get('key')
一起单独定义。这将允许使用关键字的嵌套列表值。
- 迭代列表并仅过滤 common_keywords
中的列表
- 将此列表传递到 collections.Counter 以获取您的字典
- Return 它是一个列表,里面只有一个字典,正如你所期望的那样
我有一个常用关键字列表:
common_keywords = ['dog', 'person', 'cat']
还有一个字典列表,其中包含关键字,有时还包含上面列出的 common_keywords
:
people = [{'name':'Bob', 'keywords': ['dog', 'dog', 'car', 'trampoline']},
{'name':'Kate', 'keywords': ['cat', 'jog', 'tree', 'flower']},
{'name':'Sasha', 'keywords': ['cooking', 'stove', 'person', 'cat']}]
我想计算每个人 common_keywords
的频率,因此所需的输出看起来像:
counts = [{'name': 'Bob', 'counts': [{'dog': 2}]},
{'name': 'Kate', 'counts': [{'cat': 1}]},
{'name': 'Sasha', 'counts': [{'person':1}, {'cat': 1}]]
我可以使用 dict(Counter())
来计算关键字并过滤它们(如果它们出现在 common_keywords
中,但我正在努力将这些计数链接回所需的原始名称输出:counts
.
当前代码(我想我正在慢慢到达那里):
freq_dict = {}
for p in people:
name = p['name']
for c in p['keywords']:
if c not in freq_dict:
freq_dict[name] = {c: 1}
else:
if c not in freq_dict[name]:
freq_dict[c] = 1
else:
freq_dict[c] +=1
您可以将列表推导与 collections.Counter
一起使用,它完全符合您对嵌套列表的要求。 -
from collections import Counter
[{'name':i.get('name'),
'keywords':[dict(Counter([j for j in i.get('keywords')
if j in common_keywords]))]} for i in people]
[{'name': 'Bob', 'keywords': [{'dog': 2}]},
{'name': 'Kate', 'keywords': [{'cat': 1}]},
{'name': 'Sasha', 'keywords': [{'person': 1, 'cat': 1}]}]
- 首先,通过列表推导,您想要重建原始的字典列表,其中的键与
i.get('key')
一起单独定义。这将允许使用关键字的嵌套列表值。 - 迭代列表并仅过滤 common_keywords 中的列表
- 将此列表传递到 collections.Counter 以获取您的字典
- Return 它是一个列表,里面只有一个字典,正如你所期望的那样