0

我的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' 请帮助!

4

2 回答 2

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'}

您想要的是将lists 作为值:

>>> 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

通常在这种情况下使用 adefaultdict而不是 plaindict更好。

于 2013-05-07T15:07:33.627 回答
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'}
于 2013-05-07T15:08:37.697 回答