繁体   English   中英

如何更新两个单独列表中的字典?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM