use*_*318 0 python counter dictionary list
所以我有一本字典
d = {'a': [4,'Adam', 2, ‘Bob’, 3], 'b': [3,'John', 4, ‘Bill’], 'c': [4,'Adam', 3, 4, ‘John’], 'd': [4,'Bill', ‘Joe’, 3], 'e': [4,'Bob', ‘Bob’, 5, 8, 10], 'f': [4, 'Joe'], 'g': [4, 'Bill', 4, ‘Joe’, 1]}
Run Code Online (Sandbox Code Playgroud)
我想从中返回名称的计数,例如
Adam: 2
Bill: 3
John: 2
Bob: 3
Joe: 3
Run Code Online (Sandbox Code Playgroud)
我试过通过这个函数使用集合计数器:
x = 0
for vals in d.itervalues():
while x<len(vals):
if type(vals[x]) == str:
print Counter([vals[x]])
x = x+1
Run Code Online (Sandbox Code Playgroud)
哪个回报
Counter({'Adam': 1})
Counter({'Bob': 1})
Counter({'Adam': 1})
Counter({'John': 1})
Counter({'John': 1})
Counter({'Bill': 1})
Counter({'Bob': 1})
Counter({'Bob': 1})
Counter({'Bill': 1})
Counter({'Joe': 1})
Counter({'Bill': 1})
Counter({'Joe': 1})
Counter({'Joe': 1})
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的结果.我只需要添加计数器吗?我该怎么办?我知道计数器类有一个加/减函数,但我正在尝试的方法不起作用.
我也试过这样的东西打印出每种变化的不同计数器.
'c%s'%(x)
Run Code Online (Sandbox Code Playgroud)
这将为每个计数器设置c1,c2,c3然后我可以用c1 + c2 + c3添加它们以获得我想要的结果.但是,我无法打印出这些不同的计数器列表.
除此之外,一旦它返回结果,它总是返回"Counter({ _ _})".我将如何删除该部分或仅打印出名称和数量?
谢谢您的帮助!
您正在创建一个新的Counter为您计算,你需要一个每个项目,例如单实例指望他们所有:
from collections import Counter
counter = Counter(s for v in d.itervalues() for s in v if isinstance(s, str))
Run Code Online (Sandbox Code Playgroud)
这导致了
Counter({'Bob': 3, 'Bill': 3, 'Joe': 3, 'John': 2, 'Adam': 2})
Run Code Online (Sandbox Code Playgroud)
请注意,如果可能,通常应避免出现在字典值中的异类列表.
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |