我有兩個串列:
list1 = [{"name":"xyz" ,"roll":"r" , "sap_id":"z"} , {"name":"pqr" ,"roll":"s" , "sap_id":"w"}]
list2 = [{"cn_number":"26455"} , {"cn_number":"26456"}]
我想要一個新串列,如:
new_list = [{"name":xyz ,"roll":"r" , "sap_id":"z","cn_number":"26455"} , {"name":"pqr" ,"roll":"s" , "sap_id":"w","cn_number":"26456"}]
我嘗試了以下方法:
new_list = [i.update(j) for i, j in zip(list1, list2)]
但是出現了一些嚴重的錯誤
uj5u.com熱心網友回復:
此語法適用于python3.5 合并兩個字典z = {**x, **y}
Python 3.7.0 (default, Jun 28 2018, 13:15:42)
>>> list1 = [{"name":"xyz" ,"roll":"r" , "sap_id":"z"} , {"name":"pqr" ,"roll":"s" , "sap_id":"w"}]
>>> list2 = [{"cn_number":"26455"} , {"cn_number":"26456"}]
>>> new_list = [{**i, **j} for i, j in zip(list1, list2)]
>>> new_list
[{'name': 'xyz', 'roll': 'r', 'sap_id': 'z', 'cn_number': '26455'}, {'name': 'pqr', 'roll': 's', 'sap_id': 'w', 'cn_number': '26456'}]
更多資訊:如何在一個運算式中合并兩個字典(取字典的并集)?
uj5u.com熱心網友回復:
您可以使用Python 3.5 dict 合并語法:
new_list = [{**a, **b} for (a, b) in zip(list1, list2)]
結果是
[
{'name': 'xyz', 'roll': 'r', 'sap_id': 'z', 'cn_number': '26455'},
{'name': 'pqr', 'roll': 's', 'sap_id': 'w', 'cn_number': '26456'},
]
uj5u.com熱心網友回復:
一種有效的方法是使用collections.ChainMapwhich 專門用于組合多個字典。在此處閱讀有關檔案的更多資訊。
from collections import ChainMap
[dict(ChainMap(i,j)) for i,j in zip(list1, list2)]
[{'cn_number': '26455', 'name': 'xyz', 'roll': 'r', 'sap_id': 'z'},
{'cn_number': '26456', 'name': 'pqr', 'roll': 's', 'sap_id': 'w'}]
注意:根據您希望如何使用更新串列中的每個元素,您可以使用生成器并避免使用
dict()overChainMapobject 來獲得所需的內容,而無需使用不必要的記憶體!ChainMap通過仍然參考原始物件,為您提供多個字典的單一可更新視圖。
#efficient way -
#EDITED: lesser keystrokes as suggested by @Kelly
g = map(ChainMap, list1, list2)
#g = (ChainMap(i,j) for i,j in zip(list1, list2))
next(g).get('sap_id')
z
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/400932.html
下一篇:如何從restAPI獲取資料?
