'बहुत सारे मूल्य अनपैक करने के लिए', एक तानाशाही से अधिक। कुंजी => स्ट्रिंग, मूल्य => सूची


323

मुझे 'too many values to unpack'त्रुटि मिल रही है । कुछ अनुमान है इसे कैसे ठीक किया जा सकता है?

first_names = ['foo', 'bar']
last_names = ['gravy', 'snowman']

fields = {
    'first_names': first_names,
    'last_name': last_names,
}        

for field, possible_values in fields:  # error happens on this line              

जवाबों:


478

अजगर २

आपको कुछ का उपयोग करने की आवश्यकता है iteritems

for field, possible_values in fields.iteritems():
    print field, possible_values

अजगर संस्करणों में, शब्दकोशों के माध्यम से पुनरावृत्ति के बारे में अधिक जानकारी के लिए इस उत्तर को देखें items()

अजगर ३

के बाद से अजगर 3 iteritems() है का समर्थन बंदitems()इसके बजाय उपयोग करें ।

for field, possible_values in fields.items():
    print(field, possible_values)

88
जैसे कि आपको ऐसा करने की आवश्यकता क्यों है, एक शब्दकोश पर चलना कुंजी के माध्यम से पुनरावृत्त करता है, कुंजी / मूल्य जोड़े नहीं।
जेफ मर्काडो

1
@ जेफ्फ, यही मुझे भ्रमित करता है। मैं एक PHP के रूप में यह देखा foreach।
टिपू

79

पायथन के लिए 3.x iteritemsहटा दिया गया है। इसके बजाय आइटम का उपयोग करें ।

for field, possible_values in fields.items():
    print(field, possible_values)

37

आप पुनरावृत्तियों का उपयोग करना चाहते हैं । यह डिक्शनरी पर एक पुनरावृत्ति देता है, जो आपको एक टपल देता है (कुंजी, मूल्य)

>>> for field, values in fields.iteritems():
...     print field, values
... 
first_names ['foo', 'bar']
last_name ['gravy', 'snowman']

आपकी समस्या यह थी कि आप फ़ील्ड्स पर लूप कर रहे थे, जो शब्दकोश की कुंजी देता है।

>>> for field in fields:
...     print field
... 
first_names
last_name

9

सूचियों के लिए, का उपयोग करें enumerate

for field, possible_values in enumerate(fields):
    print(field, possible_values)

iteritems सूची वस्तुओं के लिए काम नहीं करेगा


यह अजगर 2.7 के लिए कम से कम एक सही उत्तर (परीक्षण) होना चाहिए।
गोबर

1

Python3 iteritems()में अब समर्थित नहीं है

समाधान 1 :

उपयोग .items

for field, possible_values in fields.items():
    print(field, possible_values)

समाधान 2 :

आप उपयोग कर सकते हैं enumerate()और साथ ही

for field, possible_values in enumerate(fields):
    print(field, possible_values)

0

सीधे शब्दकोश में प्रसारित नहीं किया जा सकता। तो आप ट्यूपल में परिवर्तित कर सकते हैं ।

first_names = ['foo', 'bar']
last_names = ['gravy', 'snowman']

fields = {
    'first_names': first_names,
    'last_name': last_names,
         } 
tup_field=tuple(fields.items())
for names in fields.items():
     field,possible_values = names
     tup_possible_values=tuple(possible_values)
     for pvalue in tup_possible_values:
           print (field + "is" + pvalue)

कृपया अपना उत्तर बताएं।
मैकीज जुरेस्को

सीधे शब्दकोश में प्रसारित नहीं किया जा सकता। तो आप ट्यूपल में परिवर्तित कर सकते हैं।
सत्य नारायण पारधी

0

आप fields.iteritems()अपने कोड में गायब हैं ।

आप इसे अन्य तरीके से भी कर सकते हैं, जहाँ आपको शब्दकोश में कुंजियों का उपयोग करके मान मिलते हैं।

for key in fields:
    value = fields[key]

0
data = (['President','George','Bush','is','.'],['O','B-PERSON','I-PERSON','O','O'])
corpus = []
for(doc,tags) in data:
    doc_tag = []
    for word,tag in zip(doc,tags):
        doc_tag.append((word,tag))
        corpus.append(doc_tag)
        print(corpus)

4
ढेर अतिप्रवाह में आपका स्वागत है! आम तौर पर, उत्तर बहुत अधिक सहायक होते हैं यदि वे इस बात का स्पष्टीकरण शामिल करते हैं कि कोड क्या करने का इरादा है, और क्यों यह समस्या को दूसरों को पेश किए बिना हल करता है।
टिम डाइकमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.