0

how to fix this problem the code gives me ValueError: too many values to unpack (expected 2)

from collections import OrderedDict

languages = OrderedDict()

languages['jen'] = 'python'
languages['sarah'] = 'c'
languages['edward'] = 'ruby'
languages['phil'] = 'python'

for name, language in languages:
    print(name.title() + "'s favorite language is " + 
    language.title() + ".")
SuperKogito
  • 2,998
  • 3
  • 16
  • 37
  • 2
    Does this answer your question? ['too many values to unpack', iterating over a dict. key=>string, value=>list](//stackoverflow.com/q/5466618/90527) – outis Dec 24 '21 at 08:56

1 Answers1

3

An odict_iterator (what you get when using an OrderedDict in a for loop like this) only yields its keys, not the key/value pairs. Use the items method to get those:

for name, language in languages.items():
    ...

(This is true for any kind of dict; a dict provides a dictkey_iterator, but OrderedDict, I suppose, has its own to provide its keys in original insertion order.)

(As of Python 3.7, a dictkey_iterator will also yield keys in insertion order, but when OrderedDict was introduced, this was the defining difference.)

chepner
  • 497,756
  • 71
  • 530
  • 681