2011-05-08 227 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可能更大