【问题标题】:Python - Update a dictionary's value with another dictionary [duplicate]Python - 用另一个字典更新字典的值[重复]
【发布时间】:2021-09-06 12:42:31
【问题描述】:

我有以下两本词典

a = {'a': 1, 'b': 2, 'c': 3}
b = {1: 11, 2: 22}

我想将a修改成

a = {'a': 11, 'b': 22, 'c': 3}

我如何实现这个结果?

【问题讨论】:

  • 到目前为止你的尝试是什么?
  • Python 字典是无序的,因此您不能假设“a”和“1”将是每个字典中的第一个条目。因此这是不可能的,如果您希望订单有意义,您应该使用列表
  • "Python 字典是无序的......" 这不再是 100% 正确的了。请看这个stackoverflow.com/questions/54849202

标签: python dictionary


【解决方案1】:

您可以使用以下dict-comprehension

a = {'a': 1, 'b': 2, 'c': 3}
b = {1: 11, 2: 22}
a = {k:b.get(v,v) for k,v in a.items()}
print(a)

输出

{'a': 11, 'b': 22, 'c': 3}

注意.get(v,v)的用法,所以如果b中没有键,则保留原始值。

【讨论】:

  • 你假设“a”和“1”是第一个条目,但是python字典是无序的,所以代码不会总是给出相同的答案
  • @ithomas - 在遍历每个键时,不管它们的位置如何,顺序有什么影响?
  • @ithomas 这取决于版本,字典是无序的 如果你使用足够古老的python 版本,在 3.7 和更新版本中,如Built-in Types docs 所说 字典顺序是保证是广告订单。
  • 是的,如果您使用的是 Python 3.5 或更低版本,此解决方案将无法正常工作
  • @ithomas 那么请提供这样的输入数据,以防在 python 3.5 或更低版本中出现“解决方案无法正常工作”
【解决方案2】:

你可以试试听写理解

{k1: b.get(v1, v1) for k1,v1 in a.items()}
{'a': 11, 'b': 22, 'c': 3}

【讨论】:

    【解决方案3】:

    试试这个:

    a = {k: b.get(v, v) for k, v in a.items()}
    

    【讨论】:

      【解决方案4】:

      试试这个:

      a = {'a': 1, 'b': 2, 'c': 3}
      b = {1: 11, 2: 22}
      for k,v in a.items():
              a[k] = b.get(v, v)
      print(a)
      

      输出:

      {'a': 11, 'b': 22, 'c': 3}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-24
        • 2013-02-23
        • 2018-12-05
        • 2019-03-14
        • 1970-01-01
        • 2020-01-27
        相关资源
        最近更新 更多