2013-07-24 5 views
6

मैं एक समारोह है कि एक स्ट्रिंग, सूची और एक शब्दकोशValueError: बहुत अधिक मान अजगर शब्दकोश में अनपैक करने

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 

स्वीकार करता है, लेकिन यह एक त्रुटि

ValueError: too many values to unpack

मेरी मापदंडों

हैं रिटर्न
superDynaParams('Mark Paul', 
       'programming','arts','japanese','literature','music', 
       father='papa',mother='mama',sister='neechan',brother='niichan') 
+0

के संभावित डुप्लिकेट [अजगर ValueError: बहुत अधिक मान अनपैक करने के लिए] (http://stackoverflow.com/questions/7053551/python-valueerror-too-many-values-to-unpack) –

उत्तर

13

आप एक शब्दकोश पर लूप कर रहे हैं:

for key, role in relatives: 

लेकिन यह केवल कुंजी उत्पन्न करता है, इसलिए एक समय में एक ही वस्तु। आप कुंजी और मूल्यों से अधिक पाश चाहते हैं, dict.items() विधि का उपयोग करें:

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

आप के बजाय एक इटरेटर का उपयोग करना चाहिए से अधिक पुनरावृति करने के लिए:

for key, role in relatives.items(): 

अजगर 2 पर, दक्षता के लिए dict.iteritems() विधि का उपयोग आइटम:

relatives.iteritems() 

for relative in relatives.iteritems(): 
    //do something 
संबंधित मुद्दे