2011-08-17 52 views
2

我想避免update()方法,並且我讀到可以使用「+」操作數將兩個字典合併到第三個字典中,但我的外殼發生了什麼:python3:與「+」操作數的字典求和(聯合)引發異常

>>> {'a':1, 'b':2}.items() + {'x':98, 'y':99}.items() 
Traceback (most recent call last): 
    File "<pyshell#84>", line 1, in <module> 
    {'a':1, 'b':2}.items() + {'x':98, 'y':99}.items() 
TypeError: unsupported operand type(s) for +: 'dict_items' and 'dict_items' 
>>> {'a':1, 'b':2} + {'x':98, 'y':99} 
Traceback (most recent call last): 
    File "<pyshell#85>", line 1, in <module> 
    {'a':1, 'b':2} + {'x':98, 'y':99} 
TypeError: unsupported operand type(s) for +: 'dict' and 'dict' 

我該如何得到這個工作?

+1

「我看這是可能的合併兩個詞典一起使用「+」操作數到第三個詞典中 - 不,它不是。我不知道你在哪裏閱讀它,但它是錯誤的。 –

回答

8
dicts = {'a':1, 'b':2}, {'x':98, 'y':99} 
new_dict = dict(sum(list(d.items()) for d in dicts, [])) 

new_dict = list({'a':1, 'b':2}.items()) + list({'x':98, 'y':99}.items()) 

在Python 3中,items不返回list如同在Python 2,但dict view。如果您想使用+,則需要將它們轉換爲list s。

你最好不要使用update帶或不帶copy

# doesn't change the original dicts 
new_dict = {'a':1, 'b':2}.copy() 
new_dict.update({'x':98, 'y':99}) 
+0

清晰無遺,謝謝! – etuardu