元组到Dict :: TypeError:无法将字典更新序列元素#0转换为序列

时间:2017-10-06 20:13:26

标签: python dictionary

这样可行:

In [104]: i = [(1, 'a')]
In [105]: dict(i)
Out[105]: {1: 'a'}

似乎我有一个包含一个元组的列表,我调用了dict()函数,它返回了一个字典。

由于电话原因,我没有改变:

In [114]: i
Out[114]: [(1, 'a')]

如果我试试这个:

 In [108]: i = (1, 'a')
 In [109]: dict(i)

我得到TypeError:无法将字典更新序列元素#0转换为序列。

我认为这是因为元组是不可变的。如果是的话,我没有改变任何事情,对吧?

在上面的工作示例中,我仍然只是我。

3 个答案:

答案 0 :(得分:1)

来自python文档(link):

  

class dict(** kwarg)

     

class dict(mapping,** kwarg)

     

class dict(iterable,** kwarg)

     

返回从可选位置参数和可能为空的关键字参数集初始化的新字典。

     

如果没有给出位置参数,则创建一个空字典。如果   给出一个位置参数,它是一个映射对象,a   使用与映射相同的键值对创建字典   宾语。否则,位置参数必须是可迭代对象。   iterable中的每个项目本身必须是一个只有两个的可迭代项   对象。每个项目的第一个对象成为新项目的关键   字典,第二个对象的对应值。如果一把钥匙   不止一次出现,该键的最后一个值变为   新词典中的相应值。

     

如果给出关键字参数,则为关键字参数及其值   被添加到从位置参数创建的字典中。如果一个   正在添加的密钥已经存在,来自关键字的值   参数替换位置参数中的值。

您正在传递一个可迭代的元组,因此python迭代它尝试扩展2(键和值)中的成员并失败,因为成员不是可以分配给Key和value的2成员可迭代。

答案 1 :(得分:0)

dict()希望您传递mapping object或可迭代的键值对(每个键值对必须是2个元素的可迭代对象)。

后两个元组的列表,单个2元组都不是。

答案 2 :(得分:0)

dict需要一系列序列,所以当你给它一个一维序列时它会失败。您可以使用元组而不是列表。

d = dict(((1, 1), (2, 2)))

给我们

{1: 1, 2: 2}