每个不同键的值的计数

时间:2013-05-07 15:02:57

标签: python dictionary

我的python代码是这样的:

d={'abc':'movies', 'abc': 'sports', 'abc': 'music', 'xyz': 'music', 'pqr':'music','pqr':'movies', 'pqr':'sports', 'pqr':'news', 'pqr':'sports'}

b=[j[0] for i in d for j in i.items()]

for k in list(set(b)):
    print "{0}: {1}".format(k, b.count(k))

我需要分别为每个键打印不同值的数量。 这意味着我想要打印

abc 3
xyz 1
pqr 4

我收到错误:AttributeError: 'str' object has no attribute 'items' 请帮忙!

2 个答案:

答案 0 :(得分:7)

你不能这样做,因为每个键只能在字典中出现一次:

>>> d={'abc':'movies', 'abc': 'sports', 'abc': 'music', 'xyz': 'music', 'pqr':'music','pqr':'movies', 'pqr':'sports', 'pqr':'news', 'pqr':'sports'}
>>> d
{'pqr': 'sports', 'abc': 'music', 'xyz': 'music'}

您想要的是list作为值:

>>> d = {'abc': ['movies', 'sports', 'music'], 'xyz': ['music'], 'pqr': ['music', 'movies', 'sports', 'news', 'sports']}
>>> d
{'xyz': ['music'], 'abc': ['movies', 'sports', 'music'], 'pqr': ['music', 'movies', 'sports', 'news', 'sports']}

通过这种表示,你可以很自然地做到这一点:

>>> for key, value in sorted(d.items()):
...     print key, len(value)   #in python3: print(key, len(value))
... 
abc 3
pqr 5
xyz 1

如果您想要为给定键添加值,只需执行以下操作:

>>> d['xyz'].append('news')
>>> for key, value in sorted(d.items()):
...     print key, len(value)
... 
abc 3
pqr 5
xyz 2

通常在这种情况下使用defaultdict代替普通dict会更好。

答案 1 :(得分:1)

Python中的字典中不能有重复的键:

>>> d = {'abc':'movies', 'abc': 'sports', 'abc': 'music', 'xyz': 'music', 'pqr':'music','pqr':'movies', 'pqr':'sports', 'pqr':'news', 'pqr':'sports'}
>>> print d
{'pqr': 'sports', 'abc': 'music', 'xyz': 'music'}