当前位置: 首页 > 知识库问答 >
问题:

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

淳于凯
2023-03-14

我有两份清单:

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)]

但有一些严重的错误

共有3个答案

璩涛
2023-03-14

一种有效的方法是使用集合。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'}]

注意:根据您想要如何使用更新列表中的每个元素,您可以使用生成器并避免使用dicon()overChainMap对象仍然可以在不使用不必要的内存的情况下获得所需的内容!ChainMap通过仍然引用原始对象,为您提供了多个字典的单个可更新视图。

#efficient way -

g = (ChainMap(i,j) for i,j in zip(list1, list2))

next(g).get('sap_id')
z
洪飞鸿
2023-03-14

您可以使用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'},
]
帅博简
2023-03-14

这种语法适用于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'}]

更多信息:如何在一个表达式中合并两个词典(以词典的并集为例)?

 类似资料:
  • 目前我正在做一个应用程序,这是一个租车的应用程序。该应用程序可以租车,还车等。对于还车,我输入还车者的用户名,试图查询数据库并提取出他们正在租哪辆车,然后更新用户不再有租车,并更新汽车细节以变得可用。然而,我注意到,当我查询数据库时,我得到了一个空返回。我看到我的表有这个用户,所以也许我的语法是错误的,请帮助。 java.lang.nullpointerException位于com.rental.

  • 我一直在尝试获得一种表单来更新Ruby on Rails中的两个表。我在这里进行了相当详尽的搜索,我发现指南有点令人困惑。我找到的最接近的答案是: Ruby on Rails 从一个窗体保存在两个表中 我大部分时间都复制了这个答案,但我仍然无法让它工作。以下是相关的代码位: 模型-我有两个模型,供应商和客户。每个供应商应有一个账户。 形式-不确定这是否完全正确 最后是< code >供应商控制器

  • 我正在开发一个使用spring Boot的汽车销售系统。当汽车经销商发布出售的汽车时,默认情况下,汽车状态设置为“挂起”,管理员应该批准发布。我想更新这辆车的状态,而不更新一辆车的其他属性(milleage,price,model,等等)。所以我尝试使用put,但我得到一个错误,即POST是不允许的。这是我的代码。对于类似mysql语句的任何见解,请设置columnName=newValue,其中

  • 两个(切换)按钮是否可能在片段之间具有同步行为?即:当按钮A在片段A中打开时,我希望按钮B在片段B中的外观也显示为打开。 我该怎么做呢?最终目标是在任何一个片段上都有一个全局按钮。

  • 我有一张像下面这样的桌子, ID姓名电子邮件性别 这个表中已经有了一些值。 现在,我用下面的查询来添加年龄。 alter table tblPerson add Age int 现在,我的行结构看起来像 ID姓名电子邮件性别年龄 现在,我有了年龄表。有任何查询可以将这些年龄添加到新创建的列中吗? 所有年龄都是根据ID排序的。因此,如果需要逻辑,则不需要。我只需要添加列数据。 谢谢

  • 到目前为止,这是我的代码,我很难定义字符串和UInt32从列表数组中选择的每个循环。谁能告诉我如何克服这个问题?