簡體   English   中英

Python - 從多個值列表創建字典列表

[英]Python - Create list of dictionaries from multiple lists of values

我有多個數據列表,例如:年齡、姓名、性別等,都是按順序排列的,意思是每個列表的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'}]

你需要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'}]

與@mozway 相比,代碼不太明顯,但有一個優勢——它僅依賴於映射字典的單一定義,因此如果您需要添加/刪除鍵,則只需更改一對 k:v 對。

ages = [20, 21, 30]
names = ["Jhon", "Daniel", "Rob"]

d = {
        "name" : names,
        "age" : ages
    }

list_of_dicts = [dict(zip(d,t)) for t in zip(*d.values())]

print(list_of_dicts)

為了好玩:)你可以使用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'}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM