'আনপ্যাক করার জন্য অনেকগুলি মান', ডিকের সাহায্যে পুনরাবৃত্তি করে। কী => স্ট্রিং, মান => তালিকা


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

পাইথন 2

আপনার মতো কিছু ব্যবহার করা দরকার 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
@ জেফএম এটাই আমাকে বিভ্রান্ত করেছে। আমি এইটিকে পিএইচপি ফরচ হিসাবে দেখেছি।
টিপু

79

পাইথন 3.x iteritemsএর জন্য সরানো হয়েছে। ব্যবহার করুন আইটেম পরিবর্তে।

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

37

আপনি iteritems ব্যবহার করতে চান । এটি অভিধানের উপর একটি পুনরাবৃত্তিকে ফেরত দেয় যা আপনাকে একটি টিপল দেয় (কী, মান)

>>> 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 তালিকার বস্তুর জন্য কাজ করবে না


কমপক্ষে পাইথন ২.7 এর জন্য এটি সঠিক উত্তর (পরীক্ষিত) হওয়া উচিত।
গোবর

1

পাইথন 3 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

সরাসরি অভিধানে পুনরাবৃত্তি করা যাবে না। সুতরাং আপনি tuple রূপান্তর মাধ্যমে পারেন ।

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)

আপনার উত্তর ব্যাখ্যা করুন।
ম্যাকিয়েজ জুরেসকো

সরাসরি অভিধানে পুনরাবৃত্তি করা যাবে না। সুতরাং আপনি tuple রূপান্তর মাধ্যমে পারেন।
সত্য নারায়ণ পারধি

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
স্ট্যাক ওভারফ্লোতে স্বাগতম! সাধারণত, উত্তরগুলির মধ্যে কোডটি কী করার উদ্দেশ্যে করা হয়েছে এবং কেন এটি অন্যকে পরিচয় করিয়ে না দিয়ে সমস্যার সমাধান করে তার ব্যাখ্যা অন্তর্ভুক্ত করা হলে উত্তরগুলি আরও বেশি সহায়ক।
টিম ডিকম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.