Обратный 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 заменяет значения
  • Временно распаковать словарь
  • Сортировка словаря и запись его в файл CSV
  • Метод clear () словаря удаляет все объекты, связанные с элементом, из памяти?
  • Установка значения во вложенном словаре python с учетом списка индексов и значений
  • Почему порядок в словарях и наборах произволен?
  • Альтернатива пониманию dict до Python 2.7
  • Правильный способ инициализации OrderedDict с использованием его конструктора таким образом, чтобы он сохранял порядок исходных данных?
  • Python - лучший язык программирования в мире.