【问题标题】:Combine two dictionaries with preference to one of them - [duplicate]结合两个字典,优先选择其中一个 - [重复]
【发布时间】:2021-04-08 20:48:24
【问题描述】:

我有两本字典

一个:

default = {"val1": 10, "val2": 20, "val3": 30, "val4": 40}

两个:

parsed = {"val1": 60, "val2": 50}

现在,我想组合这两个字典,使两个字典中存在的键的值取自 parsed 字典和 default 中的其余键的值,并将它们的值放入到新词典。

对于上面给定的字典,新创建的字典将是,

updated = {"val1": 60, "val2": 50, "val3": 30, "val4": 40}

对此进行编码的明显方法是遍历default 中的键并检查parsed 中是否存在该键,然后将其放入新列表updated 和相同的else 子句中检查我们可以使用来自default 的值。

我不确定这是一种 Python 的方式还是一种更简洁的方法。有人可以帮忙吗?

【问题讨论】:

  • updated = {**default, **parsed},从 python 3.9 (PEP 0584) 开始你也可以使用updated = default | parsed
  • 不。我的问题是在组合表达式中优先使用字典而不是另一个字典。
  • 不确定评论被删除的原因。重复的目标确实回答了这个问题。例如,请参阅接受的答案:“所需的结果是获得一个新字典 (z),其中的值合并,第二个字典的值覆盖第一个字典的值。”这里的答案不'不要添加任何新内容,只需重复重复目标中给出的解决方案。

标签: python dictionary grouping


【解决方案1】:

首先,使用dict.copy() 方法创建dict 的副本,其中包含要保留的值然后,使用dict.update() 方法将另一个dict 更新为创建dict 副本:

default = {"val1": 10, "val2": 20, "val3": 30, "val4": 40}
parsed = {"val1": 60, "val2": 50}

updated = default.copy()
updated.update(parsed)

print(updated)

输出:

{'val1': 60, 'val2': 50, 'val3': 30, 'val4': 40}

【讨论】:

    【解决方案2】:

    您可以使用{**dict1,**dict2} 创建一个新字典,其中dict2 是在值方面应具有优先权的字典

    >>> updated = {**default, **parsed}
    >>> updated
    {'val1': 60, 'val2': 50, 'val3': 30, 'val4': 40}
    

    【讨论】:

      【解决方案3】:

      也可以:

      updated = {**default, **parsed}
      

      输出:

      {'val1': 60, 'val2': 50, 'val3': 30, 'val4': 40}
      

      【讨论】:

        猜你喜欢
        • 2012-07-27
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 2017-07-23
        • 2014-11-14
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        相关资源
        最近更新 更多