Python: множественные значения вводят словарь в пару ключ / значение - PullRequest
0 голосов
/ 04 октября 2018

Вот мой входной словарь:

dict = {"key1": [value1, value2], "key2": ["value3", "value4", "value5"]}

Мне нужен следующий результат:

[(key1, value1), (key1, value2), (key2, value3) ...]

Как я могу это сделать в python?

Я хочу использовать это для создания таблицы1, чтобы присоединить ее к таблице2 по «значению».

Ответы [ 5 ]

0 голосов
/ 04 октября 2018

Использование списка понимания

l = [(i, j) for i in d for j in d[i]]    
# [('key1', 'value1'), ('key1', 'value2'), ('key2', 'value3'), ('key2', 'value4'), ('key2', 'value5')]
0 голосов
/ 04 октября 2018

Похоже, вы просто хотите что-то простое, как это:

my_dict = {"key1": ["value1", "value2"], "key2": ["value3", "value4", "value5"]}

my_list = []

for my_key, value_list in my_dict.items():
    for value in value_list:
        my_list.append({my_key:value})

print(my_list)

Вывод:

[{'key1': 'value1'}, {'key1': 'value2'}, {'key2': 'value3'}, {'key2': 'value4'},
 {'key2': 'value5'}]

Я намеренно сохраняю это очень простым.Повторяйте свой словарь, повторяйте каждый список значений, создавайте словарь, добавляйте этот словарь в новый список.Есть несколько способов сделать это, это просто один очень читаемый / простой для понимания вариант.

0 голосов
/ 04 октября 2018

Если вам нужен подход на чистом Python:

[(k, inner) for k, v in dct.items() for inner in v]

[('key1', 'value1'),
 ('key1', 'value2'),
 ('key2', 'value3'),
 ('key2', 'value4'),
 ('key2', 'value5')]

Я бы рекомендовал , а не , используя имя dict для словаря,так как он переопределяет встроенный конструктор типов.

0 голосов
/ 04 октября 2018

Сначала осознайте, что только в Python (до версии 3.6) dict не упорядочены.Следовательно, порядок в результирующем списке кортежей, скорее всего, будет не таким, как присвоение дикту.

Учитывая это, вы можете сделать:

di={"key1": ["value1", "value2"], "key2": ["value3", "value4", "value5"]}

result=[]
for k,li in di.items():
    for e in li:
        result.append((k,e))
0 голосов
/ 04 октября 2018

Поскольку вы пометите pandas

s=pd.Series(d).apply(pd.Series).stack()
list(zip(s.index.get_level_values(0),s))
Out[869]: 
[('key1', 'value1'),
 ('key1', 'value2'),
 ('key2', 'value3'),
 ('key2', 'value4'),
 ('key2', 'value5')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...