Ошибка "списка" неисчислимого типа при попытке вычислить наиболее частые значения - PullRequest
0 голосов
/ 05 апреля 2020

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

d = {'G': ['R'],
 'L': ['H'],
 'H': ['H', 'L', 'T', 'M'],
 'T': ['R'],
 'S': ['M', 'L', 'H'],
 'M': ['R']}

Я ищу наиболее частые значения из этого словаря в списке. Прыжок, чтобы получить вывод:

['H', 'R']

Это код, который я пытался запустить:

values_list = list(d.values())
max(set(values_list), key=values_list.count)

При запуске этого кода я получаю сообщение об ошибке "unhashable type: 'list'" , Мне интересно, есть ли простое исправление этого кода для решения моей проблемы.

1 Ответ

0 голосов
/ 05 апреля 2020

Попробуйте:

import collections
import itertools

values = [[x] if isinstance(x, str) else x for x in d.values()]
counter = collections.Counter(itertools.chain.from_iterable(values))

max_value = max(counter.values())  # maximum value
max_keys = [k for k, v in counter.items() if v == max_value] # getting all keys containing the `maximum`

print(max_keys)

счетчик:

Counter({'R': 3, 'H': 3, 'L': 2, 'T': 1, 'M': 2})

max_keys:

['R', 'H']

ИЛИ

from functools import reduce
from collections import Counter

values_list = list(d.values())
li = reduce(lambda x,y: x+y,values_list)
counter = Counter(li)
m = max(counter.values())
r = [k for k in counter if counter[k] == m]

r:

['R', 'H']
...