直接的解决方案是:唯一的参数other 是可选和元组的iterable(或其他长度为2的可迭代)。
没有参数(它是可选的,当你不需要它时:-):
>>> d = {}
>>> d.update()
>>> d
{}
带有元组的列表(不要将其与包含可选参数的方括号混淆!):
>>> d = {}
>>> d.update([("key", "value")])
>>> d
{'key': 'value'}
根据Python glossary on iterables,元组(与所有序列类型一样)也是可迭代的,但是失败了:
>>> d = {}
>>> d.update((("key", "value")))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 3; 2 is required
Python documentation on tuple 再次解开了这个谜团:
请注意,实际上是逗号构成了一个元组,而不是括号。括号是可选的,除非是在空元组的情况下,或者当需要它们以避免语法歧义时。
即(None) 根本不是元组,但 (None,) 是:
>>> type( (None,) )
<class 'tuple'>
所以这行得通:
>>> d = {}
>>> d.update((("key", "value"),))
>>> d
{'key': 'value'}
>>>
但这不是
>>> d = {}
>>> d.update(("key", "value"),)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 3; 2 is required
因为说句法歧义(逗号是函数参数分隔符)。