从单独的列表创建字典列表

时间:2017-05-10 14:34:22

标签: python list dictionary data-structures

老实说我以前曾经问过这个问题,但经过30分钟的搜索,我没有运气。

假设我们有多个列表,每个列表具有相同的长度,每个列表包含关于某些内容的不同类型的数据。我们希望将其转换为以数据类型为关键字的字典列表。

输入:

data = [['tom', 'jim', 'mark'], ['Toronto', 'New York', 'Paris'], [1990,2000,2000]]
data_types = ['name', 'place', 'year']

输出:

travels = [{'name':'tom', 'place': 'Toronto', 'year':1990},
        {'name':'jim', 'place': 'New York', 'year':2000},
        {'name':'mark', 'place': 'Paris', 'year':2001}]

基于索引的迭代很容易做到:

travels = []
for d_index in range(len(data[0])):
    travel = {}
    for dt_index in range(len(data_types)):
        travel[data_types[dt_index]] = data[dt_index][d_index]
    travels.append(travel)    

但这是2017年!必须有一个更简洁的方法来做到这一点!我们有map,flatmap,reduce,list comprehensions,numpy,lodash,zip。除非我似乎无法将这些干净地组合成这种特殊的转变。有什么想法吗?

1 个答案:

答案 0 :(得分:10)

转置数据集后,您可以在zip使用列表理解

>>> [dict(zip(data_types, x)) for x in zip(*data)]
[{'place': 'Toronto', 'name': 'tom', 'year': 1990}, 
 {'place': 'New York', 'name': 'jim', 'year': 2000}, 
 {'place': 'Paris', 'name': 'mark', 'year': 2000}]