Обратный 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()] 
  • Словарь Python deepcopy
  • Итерация над словарем python для извлечения только требуемых строк
  • Почему карта работает как izip_longest с fill = None?
  • Получить список значений из списка словарей в python
  • Поиск рекурсивно ключа в словаре
  • Python преобразует список пар в словарь
  • Как создать кортежи из одного списка с буквенно-числовыми символами?
  • Производительность Pandas DataFrame
  • Подсчет писем происходит Python
  • Получить ключ, соответствующий минимальному значению в словаре
  • Создание словаря из файла csv?
  •  
    Interesting Posts for Van-Lav

    Пользовательская функция «использования» в argparse?

    Как создать новые строки в кадре данных pandas, содержащем слова в строке существующей строки?

    Как я могу использовать файл требований к файлам для удаления, а также установить пакеты?

    Как я могу проверить, запущен ли скрипт Python в интерактивном режиме?

    matplotlib 3D-диаграмма рассеяния с цветом маркера, соответствующим значениям RGB

    Как оставить / выйти / деактивировать виртуальный виртуальный python?

    Как конвертировать EST / EDT в GMT?

    Понимание словаря Python дает KeyError

    Smartsheet Data Tracker: AttributeError: объект 'dict' не имеет атрибута 'append'

    использование обратной косой черты в python (не для выхода)

    Подмножество pandas dataframe

    Невозможно установить psycopg в Windows 7 с помощью Python 3.4.3 и PostgreSQL 9.4.4

    Что может оправдать сложность Plone?

    Поиск и добавление файла .kml с использованием python

    Как использовать elasticsearch.helpers.streaming_bulk

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