Обратный 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()] 
  • Как вытащить повторяющийся ключ из JSON?
  • Объединение словарей списков в Python
  • Отключение механизма сортировки в выводе pprint
  • Рекурсивный diff двух словарей python (ключи и значения)
  • Python: если / else в понимании dict?
  • Воспроизведение словаря списков в Python
  • Почему словари не изменяются после удаления?
  • Есть ли более элегантный способ для распаковки ключей и значений словаря в два списка без потери консистенции?
  •  
    Interesting Posts for Van-Lav

    python csv, запись заголовков только один раз

    Прокрутка назад и вперед по графику matplotlib

    Изменение соотношения сторон в строках matplotlib

    Создание и управление несколькими подключениями в Redis Python

    PyQt устанавливает свойство свойства ряда QComboBox

    Проверяет ли pytest тестовую работу с помощью тестов на основе класса unittest?

    Схемы / ссылки на архитектуру виртуальной машины Python

    Почему я не могу изменить или переназначить значения переменных в списках с помощью цикла for (python)?

    Когда использовать класс против dict в python?

    Python + SSH Password auth (нет внешних библиотек или общедоступных / закрытых ключей)?

    Доля MatPlotLib по всей фигуре

    Лучший способ проверить многоуровневый словарь Python

    Python: конвертируйте случай с верблюдом в пространство, ограниченное с помощью RegEx, и принимая во внимание Акронимы

    Может ли это быть записано как функция сокращения python?

    Как использовать файл в потоковой работе hadoop с помощью python?

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