根据项列表中元素的顺序从键列表和项列表创建字典

时间:2018-12-28 01:59:27

标签: python list csv dictionary dictionary-comprehension

查看了这个问题后,我发现找出如何将唯一列表用作项目并将单个列表用作关键字很有帮助:Creating a dictionary with keys from a list and values as lists from another list 但是,我有一些列表,其中列表的第一个,第二个和其他元素需要按此顺序与键列表关联。

问题是我尝试了该问题中描述的方法,但是在将项归因于字典的键时,并没有考虑主列表中每个列表中元素的顺序。

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_list中元素的顺序匹配,将col列表中的项目归因于key_list。

期望的输出:{m.title:['泰坦尼克号','指环王:国王的归来'],'m.studio':['2186.8','1119.9'],'m。 Gross”:['Par。','NL'],'m.year':['1997','2003']}

3 个答案:

答案 0 :(得分:1)

您可以执行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的解决方案。

答案 1 :(得分:1)

我不确定您是否真的需要列表或是否可以使用元组。但是,如果元组还可以,那么这非常简洁:

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')}

答案 2 :(得分:0)

要创建的对象列表可以使用嵌套在List理解中的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”}]] < / p>

修改

对于{ key: List }的字典:

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

{'m.year':['1997','2003'],'m.gross':['Par。','NL'],'m.title':['Titanic','The指环王:国王的归来》],'m.studio':['2186.8','1119.9']}