2013-07-24 22 views
6

Ben bir dize, liste ve bir sözlükValueError: Çok sayıda değerler Python Sözlükte açmak için

def superDynaParams(myname, *likes, **relatives): # *n is a list and **n is dictionary 
    print '--------------------------' 
    print 'my name is ' + myname 

    print 'I like the following' 

    for like in likes: 
     print like 

    print 'and my family are' 

    for key, role in relatives: 
     if parents[role] != None: 
      print key + ' ' + role 

kabul eden bir işlevi var ama

ValueError: too many values to unpack

benim parametreleri

olan bir hata döndürür
superDynaParams('Mark Paul', 
       'programming','arts','japanese','literature','music', 
       father='papa',mother='mama',sister='neechan',brother='niichan') 
+0

olası yinelenen [Python ValueError: çok fazla değerler açmak için] (http://stackoverflow.com/questions/7053551/python-valueerror-too-many-values-to-unpack) –

cevap

13

Sözlük üzerinde döngü yapıyorsunuz:

for key, role in relatives: 

Ancak bu, yalnızca anahtarını anahtarlar, böylece tek seferde tek bir nesne. Sen tekrarlatacak yerine bir yineleyici kullanmalıdır

for key, role in relatives.iteritems(): 
0

:

for key, role in relatives.items(): 

Python 2 günü, verimlilik için dict.iteritems() yöntemi kullanın: Eğer anahtarlar ve değerler üzerinde döngü istiyorsanız, dict.items() yöntemi kullanmak öğe:

relatives.iteritems() 

for relative in relatives.iteritems(): 
    //do something 
İlgili konular