Обратный python Словарь, в котором значения являются списком - PullRequest
1 голос
/ 13 июля 2020

У меня есть этот словарь с ключами и значениями в списке.

d = {'A':['A1','A2','A3'],'B':['B1','B2']}

Я хочу получить вот такой результат

inv_d = {'A1':'A','A2':'A','A3':'A','B1':'B','B2':'B'}

Я делаю это

inv_d  = {v1 for v1 in v:k for k, v in d.items()} 

Ошибка получения

  File "<ipython-input-14-96f1a52e0304>", line 2
    inv_d  = {v1 for v1 in v:k for k, v in d.items()}
                            ^
SyntaxError: invalid syntax

Ответы [ 5 ]

2 голосов
/ 13 июля 2020
inv_d = {}
for k, v in d.items():
  for v1 in v:
    inv_d[k] = v1
2 голосов
/ 13 июля 2020
{i:k for k,v in d.items() for i in v}

Вывод:

{'A1': 'A', 'A2': 'A', 'A3': 'A', 'B1': 'B', 'B2': 'B'}
2 голосов
/ 13 июля 2020

Вы должны переписать свой код на следующий:

>>> inv_d  = {v1:k for k, v in d.items() for v1 in v}
>>> inv_d
{'A1': 'A', 'A2': 'A', 'A3': 'A', 'B1': 'B', 'B2': 'B'

Краткое объяснение. Допустим, вы просто хотели сделать это с помощью обычных циклов for, вы должны написать следующее.

inv_d = {}
for k, v in d.items():
  for v1 in v:
    inv_d[k] = v1

Чтобы преобразовать это в понимание единого dict, вы должны сохранить тот же порядок циклов for:

{... for k, v in d.items()  for v1 in v}
1 голос
/ 13 июля 2020

Вы можете перебирать словарь, не используя метод items, и он перебирает ключ. Вы можете просто написать это так:

inv_d = {value: key for key in d for value in d[key]}
1 голос
/ 13 июля 2020

Немного отредактировав ваше решение, мы получим:

>>> {v1:k for k, v in d.items() for v1 in v}
{'A1': 'A', 'A2': 'A', 'A3': 'A', 'B1': 'B', 'B2': 'B'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...