У меня есть словарь, как это:Pythonic обратного ДИКТ неуникальных отображений
dict1 = {'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]}
и хочу обратный, как это:
dict2 = dict({1:['a','b','c'], 2:['a','b','c'], 3:['a','b'], 4:['b']})
Как эти вопросы:
Inverse Dict in Python \\ In-place dictionary inversion in Python
Но я хочу это сделать с уникальными ключами, и я не хочу конверсии на месте. У меня есть код, который работает, но мне было интересно, есть ли способ понимания словаря.
from collections import defaultdict
dict2 = defaultdict(list)
for i in dict1:
for j in dict1[i]:
dict2[j].append(i)
Я пробовал это, но он работает только для уникальных сопоставлений. По уникальному я имею в виду что-то вроде «для каждого значения, есть только один ключ, под которым указано значение». Таким образом, уникальное отображение: '1: [a], 2: [b], 3: [c] -> a: [1], b: [2], c: [3]' VS неединственное отображение '1: [а], 2: [а, Ь], 3: [Ь, с] -> а: [1, 2], б: [2, 3], с: [3]»
dict2 = {j: i for i in dict1 for j in dict1[i]}
Я думаю, что это должно быть что-то вроде этого:
dict2 = {j: [i for i in dict1 if j in dict1[i]] for j in dict1[i]} # I know this doesn't work
Кроме того, он не работает, похоже, постижению, как это было бы неэффективно. Есть ли эффективный способ с одним лайнером?
Он не будет работать без уникальных значений, по определению, ключи в словарях или хэш-таблиц __unique__ – Oz123
Python словари не поддерживают дубликаты ключей - > 'http: // stackoverflow.com/ questions/10664856/make-dictionary-with-duplicate-keys-in-python' –
Я предполагаю, что мое использование« уникального »неоднозначно. То, что я подразумеваю под «уникальным», заключается в том, что если исходный словарь имеет 1-1-отображение из ключа-> значение. По уникальному я имел в виду нечто вроде «для каждого значения, есть только один ключ, под которым указано значение».Таким образом, уникальное отображение: '1: [a], 2: [b], 3: [c] -> a: [1], b: [2], c: [3] 'vs' 1: [a] , 2: [a, b], 3: [b, c] -> a: [1, 2], b: [2, 3], c: [3] '' – dantiston