字典不会以字符串作为键更新

时间:2017-02-03 19:57:19

标签: python dictionary

我尝试使用返回元组的函数更新字典,其中第一个元素是字符串。

>>> def t():
...     return 'ABC', 123

然而dict.update函数并不喜欢它。

>>> d = {}
>>> d.update(t())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 3; 2 is required

我也可以尝试字典理解并获得相同的意外结果。

>>> d.update({k: v for k, v in t()})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <dictcomp>
ValueError: too many values to unpack (expected 2)

唯一可行的方法是首先保存返回的值。

>>> x = t()
>>> d.update({x[0]: x[1]})
>>> d
{'ABC': 123}

如何解释这个?

3 个答案:

答案 0 :(得分:5)

来自docs

  

update()接受另一个字典对象或一对键/值对的迭代(作为元组或长度为2的其他迭代)。如果指定了关键字参数,则使用这些键/值对更新字典:d.update(red=1, blue=2)

例如:

In [1]: d = {}

In [2]: def t(): return [('ABC', '123')]

In [3]: d.update(t())

In [4]: d
Out[4]: {'ABC': '123'}

In [5]: d2 = {}

In [6]: def t2(): return {'ABC': '123'}

In [7]: d2.update(t2())

In [8]: d2
Out[8]: {'ABC': '123'}

答案 1 :(得分:1)

@杰克的答案就是那个。

在两个失败的示例中,您都使用一对而不是一系列对

另外,只是添加一些酱料,还有两种方法可以做到:

def t():
    return 'ABC', 123
d = {}
d.update([ t() ])
d
=> {'ABC': 123}
d = {}
d.__setitem__(*t())
d
=> {'ABC': 123}

答案 2 :(得分:1)

更简单地说,更改t()以返回{key: value}

def t():
    return {'ABC': 123}

应该为你做的伎俩。