【问题标题】:Creating a list of dictionaries from separate lists从单独的列表创建字典列表
【发布时间】:2017-10-09 06:48:12
【问题描述】:

老实说,我之前希望有人问过这个问题,但经过 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。除了我似乎无法将这些清晰地组合到这个特定的转换中。有什么想法吗?

【问题讨论】:

    标签: python list dictionary data-structures


    【解决方案1】:

    您可以在转置您的数据集之后使用带有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
    猜你喜欢
    • 2018-12-17
    • 2018-03-21
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多