从不同的列表创建一个字典列表

4

我很惊讶之前没有人问过这个问题,但是在搜索了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、列表推导式、numpy、lodash、zip等工具。但是我似乎无法将它们干净地组合成这个特定的转换。有什么想法吗?

1个回答

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}]

不错!转置对我来说是新的!谢谢:D - Adverbly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接