Как инвертировать словарь, что он повторил значения

Так, у меня есть словарь почти с 100 000 (ключ, значения), пары и большинство ключей отображаются на те же значения. Например, вообразите что-то как этот:

mydict =  {'a': 1, 'c': 2, 'b': 1, 'e': 2, 'd': 3, 'h': 1, 'j': 3}

То, что я хочу сделать, должно инвертировать словарь так, чтобы каждое значение в mydict было ключом в reverse_dict и собралось отобразиться на список всего mydict.keys, который раньше отображался на то значение в mydict. Таким образом на основе примера выше я добрался бы:

reversed_dict = {1: ['a', 'b', 'h'], 2:['e', 'c'] , 3:['d', 'j']} 

Я предложил решение, которое очень дорого, и я действительно хотел бы услышать любые идеи, более эффективные, чем мой.

мое дорогое решение:

reversed_dict = {}
for value in mydict.values():
    reversed_dict[value] = []
    for key in mydict.keys():
        if mydict[key] == value:
            if key not in reversed_dict[value]: reversed_dict[value].append(key)

Output >> reversed_dict = {1: ['a', 'b', 'h'], 2: ['c', 'e'], 3: ['d', 'j']}

Я был бы очень признателен за для слушания любых идей лучше и более эффективный, чем, чем мой.Спасибо!

8
задан cs95 18 January 2019 в 07:36
поделиться

3 ответа

from collections import defaultdict
reversed_dict = defaultdict(list)
for key,value in mydict.iteritems():
    reversed_dict[value].append(key)

Пожалуйста, не используйте dict в качестве переменной, это конфликтует с функцией dict ()

11
ответ дан 5 December 2019 в 12:08
поделиться
reversed_dict = collections.defaultdict(list)
for key, value in dict_.iteritems():
  reversed_dict[value].append(key)
0
ответ дан 5 December 2019 в 12:08
поделиться
for k,v in dict.iteritems():
    try:
      reversed_dict[v].append(k)
    except KeyError:
       reversed_dict[v]=[k]
1
ответ дан 5 December 2019 в 12:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: