我有多個資料串列,例如:年齡,姓名,性別等。所有這些都是按順序排列的,這意味著每個串列的x記錄屬于同一個人。
我正在嘗試創建的是以最好的 Python 方式從這些串列中創建一個字典串列。我能夠使用其中一個串列創建它,但不確定如何從那里擴展它。
我目前擁有的:
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'}]
uj5u.com熱心網友回復:
你需要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'}]
uj5u.com熱心網友回復:
為了好玩:)你可以使用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'}]
uj5u.com熱心網友回復:
與@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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/495782.html
上一篇:如何將資料框轉換為一維字典
下一篇:在一列串列中附加缺失的專案
