Так, у меня есть словарь почти с 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']}
Я был бы очень признателен за для слушания любых идей лучше и более эффективный, чем, чем мой.Спасибо!
from collections import defaultdict
reversed_dict = defaultdict(list)
for key,value in mydict.iteritems():
reversed_dict[value].append(key)
Пожалуйста, не используйте dict в качестве переменной, это конфликтует с функцией dict ()
reversed_dict = collections.defaultdict(list)
for key, value in dict_.iteritems():
reversed_dict[value].append(key)
for k,v in dict.iteritems():
try:
reversed_dict[v].append(k)
except KeyError:
reversed_dict[v]=[k]