A commonly used function in Python is the zip function. You can use it to turn two lists of equal length into a dictionary. Naturally, it only makes sense if the elements of one list can be turned to keys and the elements of the other list to values of a dictionary.
So, what we want to achieve is turn the following two lists:
countries = ["Germany", "Japan", "Australia"]
capitals = ["Berlin", "Tokyo", "Canberra"]
into the following dictionary:
{'Germany': 'Berlin', 'Japan': 'Tokyo', 'Australia': 'Canberra'}
So, you have two lists: one with countries and the other with their capitals. They’re good candidates to be turned into a dictionary.
Table of Contents
for Loop
Actually, there are several ways you can do it. You can achieve that without the zip function, for example by using the for loop like so:
countries = ["Germany", "Japan", "Australia"]
capitals = ["Berlin", "Tokyo", "Canberra"]
a = {}
for n in range(len(countries)):
a[countries[n]] = capitals[n]
print(a)
The output is:
{'Germany': 'Berlin', 'Japan': 'Tokyo', 'Australia': 'Canberra'}
zip Function with Iterator
Another approach is to use the zip function and an iterator: Here is the function with two arguments, which are the two lists:
it = zip(countries, capitals) # it - an iterator
The function returns a list iterator. Then we have to use the list function to convert the list iterator into a list:
pairs = list(it)
If we now print pairs in interactive mode, we’ll get a list of 2-tuples:
>>> pairs
[('Germany', 'Berlin'), ('Japan', 'Tokyo'), ('Australia', 'Canberra')]
We can convert this list into a dictionary using the dict(list) function:
print(country_capital_dict)
Here’s the output:
{'Germany': 'Berlin', 'Japan': 'Tokyo', 'Australia': 'Canberra'}
Here is the full code:
countries = ["Germany", "Japan", "Australia"]
capitals = ["Berlin", "Tokyo", "Canberra"]
it = zip(countries, capitals) # it - an iterator
pairs = list(it) # list of 2-tuples
country_capital_dict = dict(pairs) # dictionary
print(country_capital_dict)
zip Function Without Iterator
We can achieve the same in a simpler way. We can pass zip as the argument of the dict function:
countries = ["Germany", "Japan", "Australia"]
capitals = ["Berlin", "Tokyo", "Canberra"]
country_capital_dict = dict(zip(countries, capitals)) # dictionary
print(country_capital_dict)
There is one thing we have to know about the zip function. It returns an iterator, not a list. In iterators the elements get used up, so that they can’t be used again. Here we have two lists again:
countries = ["Germany", "Japan", "Australia"]
capitals = ["Berlin", "Tokyo", "Canberra"]
Let’s zip them:
>>> it = zip(countries, capitals)
Now we can use the iterator to make a list:
>>> list1 = list(it)
And now let’s make another list using the same iterator:
>>> list2 = list(it)
The iterator gets used up when it is used in the first list, so the elements go to the first list:
>>> list1
[('Germany', 'Berlin'), ('Japan', 'Tokyo'), ('Australia', 'Canberra')]
and there is nothing left for the second list. The second list is empty:
>>> list2
[]
Here’s the video version:



