[英]how to update dictionaries inside two seperate lists?
我有两个清单:
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)]
但有一些令人讨厌的错误
此语法适用于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'}]
您可以使用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'},
]
一种有效的方法是使用collections.ChainMap
,它专门用于组合多个字典。 在此处阅读有关文档的更多信息。
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'}]
注意:根据您希望如何使用更新列表的每个元素,您可以使用生成器并避免在
ChainMap
object 上使用dict()
以在不使用不必要内存的情况下仍然获得所需的内容!ChainMap
通过仍然引用原始对象为您提供多个字典的单个可更新视图。
#efficient way -
g = (ChainMap(i,j) for i,j in zip(list1, list2))
next(g).get('sap_id')
z
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.