2011-05-08 18 views
9

Ben dict fonksiyonunu kullanarak bir sözlüğe bir listesini dönüştürmek çalışıyorum Bazı sorun. dict fonksiyonu

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

Yukarıdaki kod

bir dize almaya çalışırken ve split bunu ',' tarihinde ve sonrasında bir sözlüğe listesini dönüştürmek için dict işlevini kullanın edilir.

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

herkes yardımcı olabilir:

Ancak, bu hatayı alıyorum?

+0

bize ver boyutunda 2'den daha büyük olasılıkla daha büyük Girişinizin bir örneği ve ne olmasını beklediğinizi açıklayın. – NPE

+0

yerine dict' 'arasında set'' kullanmak isteyebilirsiniz. –

cevap

17

dict (dizilerini bir listesi gibi) 2-elemanı kapların bir iterable beklemektedir. Öğelerin bir listesini geçemezsiniz, bir anahtarın ne olduğunu ve değerinin ne olduğunu bilmiyor.

Bunu yapmak için çalışıyoruz:

>>> 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 bir liste böyle bekler:

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

demet içinde ilk unsur anahtarını olur ikinci değer haline gelir.

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

Sözlük bir anahtar-değer çiftidir; bu nedenle anahtarlar değerlerle eşleştirmek için uzunluk-2 listelerinin gerekli olduğunu söyler. Sen Python bu durumda şikayet nedeni budur düz bir liste haline girdi bölme - bu anahtarları olarak belirtmek ve değerler olarak ne belirtmek bilmiyor.

2

Python Data structures Dokümanlar listelenen gibi. Dict() kurucu, sözlükleri doğrudan tuple olarak depolanan anahtar/değer çiftleri listelerinden oluşturur.

çok inpu dizisi, örneğin, form, her pozisyonda ('anahtar', 'değeri') ne sahip olmalıdır

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

, giriş dizisi