我的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))
Run Code Online (Sandbox Code Playgroud)
我需要分别为每个键打印不同值的数量.这意味着我想要打印
abc 3
xyz 1
pqr 4
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:AttributeError: 'str' object has no attribute 'items'
请帮忙!
你不能这样做,因为每个键只能在字典中出现一次:
>>> 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'}
Run Code Online (Sandbox Code Playgroud)
你想要的是将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']}
Run Code Online (Sandbox Code Playgroud)
通过这种表示,您可以非常简单地执行您想要的操作:
>>> for key, value in sorted(d.items()):
... print key, len(value) #in python3: print(key, len(value))
...
abc 3
pqr 5
xyz 1
Run Code Online (Sandbox Code Playgroud)
如果您想要为给定键添加值,只需执行以下操作:
>>> d['xyz'].append('news')
>>> for key, value in sorted(d.items()):
... print key, len(value)
...
abc 3
pqr 5
xyz 2
Run Code Online (Sandbox Code Playgroud)
通常在这种情况下使用defaultdict而不是平原dict更好.
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |