Создание словаря из списка ключей и списка элементов на основе порядка элементов в списке элементов - PullRequest
0 голосов
/ 28 декабря 2018

Посмотрев на этот вопрос, я нашел полезным выяснить, как использовать уникальные списки в качестве элементов и единый список в качестве ключей: Создание словаря с ключами из списка и значениями в виде списков из другого списка Однако у меня есть списки, в которых первый, второй и другие элементы списков должны быть связаны со списком ключей в указанном порядке.

Проблема в том, что я попробовал метод, описанный в этом вопросе, но он не учитывал порядок элементов в каждом из списков в основном списке при назначении элементов ключам моего словаря..

key_list = ['m.title', 'm.studio', 'm.gross', 'm.year']
col = [['Titanic', '2186.8', 'Par.', '1997'], 
['The Lord of the Rings: The Return of the King', '1119.9', 'NL', '2003']]

Я хочу иметь словарь, в котором элементы списков col приписаны к key_list на основе порядка, в котором элементы появляются во всех списках и сопоставляются с порядком элементов всписок ключей.

Желаемый результат: {m.title: ['Титаник', 'Властелин колец: возвращение короля'], 'm.studio': ['2186.8', '1119,9'],' m.gross ': [' Par. ',' NL '],' m.year ': [' 1997 ',' 2003 ']}

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Вы можете сделать dict(zip(...)):

print([dict(zip(key_list,values)) for values in col])

Редактировать:

print({k:list(zip(*col))[i] for i,k in enumerate(key_list)})

Или @ MarkMeyer решение.

0 голосов
/ 28 декабря 2018

Я не уверен, действительно ли вам нужны списки или вы можете использовать кортежи.Но если с кортежами все в порядке, это очень лаконично:

d = dict(zip(key_list, zip(*col)))

Результат:

{'m.title': ('Titanic', 'The Lord of the Rings: The Return of the King'),
 'm.studio': ('2186.8', '1119.9'),
 'm.gross': ('Par.', 'NL'),
 'm.year': ('1997', '2003')}
0 голосов
/ 28 декабря 2018

Список объектов, которые вы хотите создать, может быть создан с пониманием Dict, вложенным в понимание списка:

[{key_list[idx]: val for idx, val in enumerate(row)} for row in col]

[{'m.year': '1997', 'm.gross ':' Par. ',' m.title ':' Titanic ',' m.studio ':' 2186.8 '}, {' m.year ':' 2003 ',' m.gross ':' NL ', 'm.title': 'Властелин колец: возвращение короля', 'm.studio': '1119.9'}]

Редактировать :

Для указания { key: List }:

dict(zip(key_list, [[row[idx] for row in col] for idx,_ in enumerate(key_list)]))

{'m.year': ['1997', '2003'], 'm.gross': ['Пар. ',' NL '],' m.title ': [' Титаник ',' Властелин колец: возвращение короля '],' m.studio ': [' 2186.8 ',' 1119.9 ']}

...