如何计算python字典中所有值的出现次数? TypeError:无法散列的类型:“列表”

时间:2020-08-02 13:17:06

标签: python list dictionary collections counter

我想计算一下字典中每个名字的出现次数(如下):

这是我的字典:

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

2 个答案:

答案 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})