Обратный Dict в Python

Я пытаюсь создать новый dict, используя список значений существующего dict в качестве отдельных ключей.

Так, например:

dict1 = dict({'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']}) 

До сих пор я не мог сделать это очень чистым способом. Какие-либо предложения?

3 Solutions collect form web for “Обратный Dict в Python”

Если вы используете Python 2.5 или выше, используйте класс defaultdict из модуля collections ; defaultdict автоматически создает значения при первом доступе к отсутствующему ключу, поэтому вы можете использовать это здесь для создания списков для dict2 , например:

 from collections import defaultdict dict1 = dict({'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]}) dict2 = defaultdict(list) for key, values in dict1.items(): for value in values: # The list for dict2[value] is created automatically dict2[value].append(key) 

Обратите внимание, что списки в dict2 не будут в каком-либо определенном порядке, так как словари не заказывают свои пары ключ-значение.

Если вы хотите, чтобы в конце концов был KeyError , который поднимет KeyError для отсутствующих ключей, просто используйте dict2 = dict(dict2) после вышеописанного.

Обратите внимание, что вам не нужен dict в ваших примерах: синтаксис {} дает вам dict:

 dict1 = {'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]} 

Другой путь:

 dict2={} [[ (dict2.setdefault(i,[]) or 1) and (dict2[i].append(x)) for i in y ] for (x,y) in dict1.items()] 
Interesting Posts

python: имя модуля, имеющего имя из двух слов

Python Selenium – AttributeError: объект WebElement не имеет атрибута sendKeys

UnicodeWarning: специальные символы в Tkinter

Инструмент для преобразования кода Python в соответствие с PEP8

Перетаскиваемая линия с перетаскиваемыми точками

Как открыть несколько файлов по одному и распечатать содержимое в Python

Программа застревает при использовании subprocess.Popen () или subprocess.check_call ()

Внешнее объединение двух кадров данных в пандах

Установка одинаковых границ оси для всех подзадач в matplotlib

Python: сопоставление значений из одного списка с последовательностями значений в другом списке

Ошибка Python "ImportError: Нет модуля с именем"

Python: реализация конструкторов мелкой и глубокой копии

Как я заказываю поведение IDublinCore в типе ловкости?

Какой самый быстрый способ рассортировать панды DataFrame?

Использование классов / статических методов в качестве значений параметров по умолчанию в методах одного и того же класса

Python - лучший язык программирования в мире.