Как подсчитать количество вхождений всех значений в словаре в python? TypeError: нехешируемый тип: 'список' - PullRequest
0 голосов
/ 02 августа 2020

Я хотел бы подсчитать количество вхождений каждого имени в словаре (ниже):

Это мой словарь:

{'blue': ['Jules', 'Lucie'],
 'brown': ['Maxime'],
 'green': ['Maxime', 'Vincent', 'Lucie']}

это мой код:

from collections import Counter

Counter(dico.values())

У меня такая ошибка: TypeError: unhashable type: 'list'

Вот результат, который я хотел бы получить:

Jules   1
Lucie   2
Maxime  2
Vincent 1

Ответы [ 2 ]

2 голосов
/ 02 августа 2020

Чтобы подсчитать количество вхождений значений в списках, требуется объединение / уплощение списков:

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

0 голосов
/ 02 августа 2020

Это можно выполнить и с двумя интерпретациями кортежей:

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

Out:

Counter({'Jules': 1, 'Lucie': 2, 'Maxime': 2, 'Vincent': 1})
...