【问题标题】:Python - Create list of dictionaries from multiple lists of valuesPython - 从多个值列表创建字典列表
【发布时间】:2022-06-27 22:05:11
【问题描述】:

我有多个数据列表,例如:年龄、姓名、性别等。所有这些都是按顺序排列的,也就是说每个列表的x记录属于同一个人。

我正在尝试以最好的 Pythonic 方式从这些列表中创建一个字典列表。我能够使用其中一个列表创建它,但不确定如何从那里扩展它。

我目前拥有的:

ages = [20, 21, 30]
names = ["Jhon", "Daniel", "Rob"]
list_of_dicts = [{"age": value} for value in ages]

返回:

[{'age': 20}, {'age': 21}, {'age': 30}]

我想要什么:

[{'age': 20, 'name': 'Jhon'}, {'age': 21, 'name': 'Daniel'}, {'age': 30, 'name': 'Rob'}]

【问题讨论】:

    标签: python list dictionary


    【解决方案1】:

    你需要zip:

    ages = [20, 21, 30]
    names = ["Jhon", "Daniel", "Rob"]
    list_of_dicts = [{"age": value, 'name': name}
                     for value, name in zip(ages, names)]
    

    您可以更进一步,使用双拉链(如果您有更多钥匙,这很有用):

    keys = ['ages', 'names']
    lists = [ages, names]
    list_of_dicts = [dict(zip(keys, x)) for x in zip(*lists)]
    

    输出:

    [{'age': 20, 'name': 'Jhon'},
     {'age': 21, 'name': 'Daniel'},
     {'age': 30, 'name': 'Rob'}]
    

    【讨论】:

      【解决方案2】:

      为了好玩:)你可以使用functools.reduce

      >>> from functools import reduce
      >>> reduce (lambda l,t: l+[{'name':t[0] , 'age':t[1]}], zip(ages, names), [])
      [{'name': 20, 'age': 'Jhon'},
       {'name': 21, 'age': 'Daniel'},
       {'name': 30, 'age': 'Rob'}]
      

      【讨论】:

      • 这种方法的问题是,如果您有很多项目,由于重复添加列表,它是二次方
      猜你喜欢
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      相关资源
      最近更新 更多