Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to iterate over a dictionary

Tags:

python

In [1]: test = {}

In [2]: test["apple"] = "green"

In [3]: test["banana"] = "yellow"

In [4]: test["orange"] = "orange"

In [5]: for fruit, colour in test:
   ....:     print fruit
   ....:     
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-32-8930fa4ae2ac> in <module>()
----> 1 for fruit, colour in test:
      2     print fruit
      3 

ValueError: too many values to unpack

What I want is to iterate over test and get the key and value together. If I just do a for item in test: I get the key only.

An example of the end goal would be:

for fruit, colour in test:
    print f"The fruit {fruit} is the colour {colour}"
like image 507
joedborg Avatar asked Dec 21 '11 12:12

joedborg


2 Answers

In Python 2 you'd do:

for fruit, color in test.iteritems():
    # do stuff

In Python 3, use items() instead (iteritems() has been removed):

for fruit, color in test.items():
    # do stuff

This is covered in the tutorial.

like image 152
Björn Pollex Avatar answered Oct 07 '22 06:10

Björn Pollex


Change

for fruit, colour in test:
    print "The fruit %s is the colour %s" % (fruit, colour)

to

for fruit, colour in test.items():
    print "The fruit %s is the colour %s" % (fruit, colour)

or

for fruit, colour in test.iteritems():
    print "The fruit %s is the colour %s" % (fruit, colour)

Normally, if you iterate over a dictionary it will only return a key, so that was the reason it error-ed out saying "Too many values to unpack". Instead items or iteritems would return a list of tuples of key value pair or an iterator to iterate over the key and values.

Alternatively you can always access the value via key as in the following example

for fruit in test:
    print "The fruit %s is the colour %s" % (fruit, test[fruit])
like image 43
Abhijit Avatar answered Oct 07 '22 06:10

Abhijit