关于python:typeerror:不支持+:’dict_items’和’dict_items’的操作数类型

TypeError: unsupported operand type(s) for +: 'dict_items' and 'dict_items'

我试着总结两本这样的字典:

1
my_new_dict = dict(my_existing_dict.items() + my_new_dict.items())

但是接收错误

1
TypeError: unsupported operand type(s) for +: 'dict_items' and 'dict_items'

我做错了什么?


由于PEP 448(Python 3.5),这是一个非常简单的解决方案和readable我会推荐:

1
{**d1, **d2}

现在,你可以选择不同的unpackings literals和unpackings,这意味着这家厂。

一个问题是,你想是的不良行为ambiguous -英语词典无法复制的钥匙,所以它是unclear发生,如果你想使用相同的两个关键。明确的规格是关于什么应该发生,当使用这个方法:

In dictionaries, later values will always override earlier ones

如果你想要一个反向的行为,你可以互换的经济秩序的literal英语词典。如果你想把一个例外,你可以使用一个dict()方法不会接受语言复制的论点,i.e:

1
dict(**d1, **d2)

在你的Python versions 3时,方法是有效的,但这里的问题是,这套字典视图是一样的,所以,他们不必加。

你可能想:d1.items() | d2.items()的联盟,这将给你的tuples (key, value)设置的。如果你再把它duplicates dict()和友好的"最后一个"的值将被使用。(3 unlike的观点是可取的unordered),所以有一个好的担保,这将结束了"第一"的项目集的结合,是一个"七",这将arbitrary。

所以,总之,只要不是秩序/复制的重要:

1
dict(d1.items() | d2.items())

注意,在Python的简单和list2,dict.items()返回,在将你的工作方法。


在python3 dict.items()返回一个对象的类型,dict_items显然不会是非常好的。(在Python语言和2,它可能是一个list返回)。

一个另类的方式添加和互惠的词典和py3k:他py2k厂。

1
2
d = dict1.copy()
d.update(dict2)

的课程,有一些关于你想ambiguity collisions的情况下发生的关键。例如,如果有两个dicts key1key1,应该是preserved的输出?或如果你使用的都是一些组合的价值吗?在英国移民的情况下,你可能想要的东西会从collections模块(用户或Counterdefaultdict)


另一个方法是:三月是一个语音的位置

dict(list(d1.items()) + list(d2.items()))

如果有两个d1是目前在d2键和值,在d2最终将字母词典。