2011-05-08 228 views
9

我想通过使用dict函数将列表转换为字典。字典功能的一些问题

inpu = input.split(",") 
dic = dict(inpu) 

上面的代码是试图得到一个字符串和split','事后我使用dict功能的列表转换为一个字典。

不过,我得到这个错误:

ValueError: dictionary update sequence element #0 has length 6; 2 is required

有人能帮忙吗?

+0

给我们一个您输入的例子,并解释您期望发生的事情。 – NPE 2011-05-08 18:35:53

+0

您可能想使用'set'而不是'dict'。 – 2011-05-08 18:48:16

回答

17

dict需要可迭代的2元素容器(如元组列表)。你不能只传递一个项目列表,它不知道什么是关键,什么是价值。

您正在试图做到这一点:

>>> range(10) 
<<< [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> dict(range(10)) 
--------------------------------------------------------------------------- 
TypeError: cannot convert dictionary update sequence element #0 to a sequence 

dict预计名单如下:

>>> zip(lowercase[:5], range(5)) 
<<< 
[('a', 0), 
('b', 1), 
('c', 2), 
('d', 3), 
('e', 4)] 

元组的第一个元素成为关键,第二个变成值。

>>> dict(zip(lowercase[:5], range(5))) 
<<< 
{'a': 0, 
'b': 1, 
'c': 2, 
'd': 3, 
'e': 4} 
0

字典是一个键 - 值对这就是为什么它说,需要长度为2的列表,以匹配键的值。你将输入分割成一个平坦的列表,这就是为什么Python在这种情况下抱怨的原因 - 它不知道要指定什么作为关键字以及指定为值。

2

Python Data structures文档中所列。 dict()构造函数直接从存储为元组的键值对列表直接构建字典。

所以inpu阵列必须是形式在每个位置(“键”,“值”)的,例如

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) 
{'sape': 4139, 'jack': 4098, 'guido': 4127} 

您的输入数组的大小比2可能更大