我想计算一下字典中每个名字的出现次数(如下):
这是我的字典:
{'blue': ['Jules', 'Lucie'],
'brown': ['Maxime'],
'green': ['Maxime', 'Vincent', 'Lucie']}
这是我的代码:
from collections import Counter
Counter(dico.values())
我遇到此错误:TypeError:无法散列的类型:“列表”
这是我想要的结果:
Jules 1
Lucie 2
Maxime 2
Vincent 1
答案 0 :(得分:2)
为了计算列表中值的出现次数,需要对列表进行链接/展平:
from itertools import chain
from collections import Counter
d = {'blue': ['Jules', 'Lucie'],
'brown': ['Maxime'],
'green': ['Maxime', 'Vincent', 'Lucie']}
Counter(chain(*d.values()))
chain
调用将列表转换为具有所有值的单个可迭代对象,结果是:
Counter({'Lucie': 2, 'Maxime': 2, 'Jules': 1, 'Vincent': 1})
答案 1 :(得分:0)
也可以通过两个元组理解来执行此操作:
from collections import Counter
your_dict = {'blue': ['Jules', 'Lucie'],
'brown': ['Maxime'],
'green': ['Maxime', 'Vincent', 'Lucie']}
Counter((inner_val for val in your_dict.values() for inner_val in val))
退出:
Counter({'Jules': 1, 'Lucie': 2, 'Maxime': 2, 'Vincent': 1})