我在Python中计算每个键的不同值时遇到问题.
我有一本字典
[{"abc":"movies"}, {"abc": "sports"}, {"abc": "music"}, {"xyz": "music"}, {"pqr":"music"}, {"pqr":"movies"},{"pqr":"sports"}, {"pqr":"news"}, {"pqr":"sports"}]
Run Code Online (Sandbox Code Playgroud)
我需要分别为每个键打印不同值的数量.
这意味着我想要打印
abc 3
xyz 1
pqr 4
Run Code Online (Sandbox Code Playgroud)
请帮忙.
谢谢
使用collections.Counter()实例和一些链接:
from collections import Counter
from itertools import chain
counts = Counter(chain.from_iterable(e.keys() for e in d))
Run Code Online (Sandbox Code Playgroud)
这可确保正确计算输入列表中包含多个键的词典.
演示:
>>> from collections import Counter
>>> from itertools import chain
>>> d = [{"abc":"movies"}, {"abc": "sports"}, {"abc": "music"}, {"xyz": "music"}, {"pqr":"music"}, {"pqr":"movies"},{"pqr":"sports"}, {"pqr":"news"}, {"pqr":"sports"}]
>>> Counter(chain.from_iterable(e.keys() for e in d))
Counter({'pqr': 5, 'abc': 3, 'xyz': 1})
Run Code Online (Sandbox Code Playgroud)
或输入词典中的多个键:
>>> d = [{"abc":"movies", 'xyz': 'music', 'pqr': 'music'}, {"abc": "sports", 'pqr': 'movies'}, {"abc": "music", 'pqr': 'sports'}, {"pqr":"news"}, {"pqr":"sports"}]
>>> Counter(chain.from_iterable(e.keys() for e in d))
Counter({'pqr': 5, 'abc': 3, 'xyz': 1})
Run Code Online (Sandbox Code Playgroud)
A Counter()具有其他有用的功能,例如以反向排序顺序列出元素及其计数的.most_common()方法:
for key, count in counts.most_common():
print '{}: {}'.format(key, count)
# prints
# 5: pqr
# 3: abc
# 1: xyz
Run Code Online (Sandbox Code Playgroud)
无需使用计数器。您可以通过这种方式实现:
# input dictionary
d=[{"abc":"movies"}, {"abc": "sports"}, {"abc": "music"}, {"xyz": "music"}, {"pqr":"music"}, {"pqr":"movies"},{"pqr":"sports"}, {"pqr":"news"}, {"pqr":"sports"}]
# fetch keys
b=[j[0] for i in d for j in i.items()]
# print output
for k in list(set(b)):
print "{0}: {1}".format(k, b.count(k))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19671 次 |
| 最近记录: |