Плоский список карт без потери отображения?

У меня есть существующий dict, который отображает отдельные значения в списки. Я хочу перевернуть этот словарь и сопоставить каждую запись списка с исходным ключом. Записи списка уникальны.

Данный:

dict { 1: ['a', 'b'], 2: ['c'] }

Результат:

dict { 'a' : 1, 'b' : 1, 'c' : 2 }

Как это может быть сделано?


person Spenhouet    schedule 23.02.2018    source источник
comment
Ключи — это кортежи с 3 целочисленными значениями, а значения (записи списка) — строки. Например: { (1, 1, 1): ['а', 'б', 'с'] }   -  person Spenhouet    schedule 23.02.2018


Ответы (2)


Вот вариант

new_dict = {v: k for k, l in d.items() for v in l}
{'a': 1, 'b': 1, 'c': 2}
person bphi    schedule 23.02.2018
comment
Это прямое решение. Спасибо. Какое правильное ключевое слово для этой техники (чтобы я мог прочитать об этом дальше)? - person Spenhouet; 23.02.2018
comment
понимание списка или понимание dict - person Arpit Solanki; 23.02.2018
comment
В частности, это понимание вложенного словаря, потому что оно использует for более одного раза. - person bphi; 23.02.2018

Вы можете использовать понимание списка для создания кортежа с парой ключ-значение, затем сгладить новый список и передать встроенной функции словаря:

d = { 1: ['a', 'b'], 2: ['c'] }
new_d = dict([c for h in [[(i, a) for i in b] for a, b in d.items()] for c in h])

Выход:

{'a': 1, 'c': 2, 'b': 1}
person Ajax1234    schedule 23.02.2018