【问题标题】:Why can't I use '+' to merge dictionaries in Python?为什么我不能在 Python 中使用“+”来合并字典?
【发布时间】:2020-06-04 08:23:31
【问题描述】:

我是 Python 新用户,我会有一些疑问。

我知道+ 运算符不仅执行数字之间的求和,还执行字符串或列表之间的连接。为什么字典不允许这样做?

【问题讨论】:

  • 可以被定义,即使这个定义是什么并不明显,但实际的答案是“因为 Python 语言的设计者决定不定义+ 字典运算符”。
  • 你会在这里找到答案:stackoverflow.com/questions/38987/…

标签: python dictionary concatenation addition


【解决方案1】:

dicts 的+ 运算符如何处理重复键?例如

>>> {'d': 2} + {'d': 1}

也许像Counter

>>> from collections import Counter
>>> Counter({'d': 2}) + Counter({'d': 1})
Counter({'d': 3})

或者像defaultdict

{'d': [2, 1]}

或者像dict.update这样覆盖第一个键?

>>> d = {'d': 2}
>>> d.update({'d':1})
>>> d
{'d': 1}

还是只留下第一把钥匙?

{'d': 2}

坦率地说,这是模棱两可的!

另见PEP 0584

使用加法运算符

这个 PEP 最初是作为一个 使用 + 和 += 运算符的 dict 添加建议。那个选择 被证明是非常有争议的,很多人都有 严重反对运营商的选择。有关详细信息,请参阅 以前版本的 PEP 和邮件列表讨论。

注意 Guido 自己做了consider and discuss this;另见issue36144

【讨论】:

  • 补充:最接近的等价物是dict.update,但请注意名称是明确的update,这表明值将被替换,+ 没有t 建议…
【解决方案2】:

在 Python 3.9 中有一个公认的 PEP :)

https://www.python.org/dev/peps/pep-0584/#specification

d = {“垃圾邮件”:1,“鸡蛋”:2,“奶酪”:3}

e = {'cheese': 'cheddar', '土豚': 'Ethel'}

d | e {'spam': 1, 'eggs': 2, 'cheese': 'cheddar', 'aardvark': 'Ethel'}

e | d {'土豚':'Ethel','垃圾邮件':1,'鸡蛋':2,'奶酪':3}

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2012-02-04
    • 2020-05-19
    • 1970-01-01
    • 2011-06-09
    • 2020-10-06
    • 2021-03-30
    • 1970-01-01
    相关资源
    最近更新 更多