# How to Convert Two Lists Into A Dictionary

Want to convert two lists into a dictionary? Do the following:

• Zip the lists together using `zip(list_1, list_2)`.
• Create a dictionary from the list of tuples using the constructor `dict()` on the result.
• In other words, call `dict(zip(list_1, list_2))` to convert two lists into a dictionary.

Try it yourself:

Let’s dive into the code step-by-step.

Problem: Given are two equal-sized lists. How can you convert them into a dictionary by using the elements of the first list as keys and the elements of the second list as values?

Example: Say, you’ve got a list of persons `['Alice', 'Bob', 'Ann']` and a list of ages `[18, 21, 33]`. You want to associated the persons to their ages so that the first person in the first list is associated to the first age value in the second list, the second person to the second age value, and so on. Ultimately, you want to obtain the dictionary `{'Alice': 18, 'Bob': 21, 'Ann': 33}.`

Naive solution: Given are two lists `list_1` and l`ist_2`.

• Create an empty dictionary `dic`.
• In a for loop, iterate over each index `i` between `0` and `len(list_1)`—the latter being excluded.
• For each index `i` use the result of `list_1[i]` as a key and the result of `list_2[i]` as a value of the dictionary. In other words, your loop body executes `dic[list_1[i]] = list_2[i]`.

Here’s the naive code that solves the problem:

```list_1 = ['Alice', 'Bob', 'Ann']
list_2 = [18, 21, 33]

dic = {}
for i in range(0,len(list_1)):
dic[list_1[i]] = list_2[i]

print(dic)
# {'Alice': 18, 'Bob': 21, 'Ann': 33}```

After creating the two lists, you create the empty dictionary dic. Then you iterate over all integer values 0, 1, 2 using the `len()` function on the first list. As both lists have the same length, this is not a problem. See my article on the `len()` function if you want to know how it works inside out. You then use the i-th value of the first list as a dictionary key and the i-th value of the second list as a dictionary value.

Pythonic One-Liner Solution: However, a better and more concise way of accomplishing the same thing in a more effective way is to use the zip function to combine both lists into a new iterable where the i-th value of `list_1` is associated with the i-th value of `list_2` in a new tuple.

Here’s the code comparing the naive solution you’ve already seen to the more concise, faster, and more Pythonic solution based on the zip() function:

```list_1 = ['Alice', 'Bob', 'Ann']
list_2 = [18, 21, 33]

# Naive Solution
dic = {}
for i in range(0,len(list_1)):
dic[list_1[i]] = list_2[i]

# Python One-Liner Solution
dic = dict(zip(list_1, list_2))

print(dic)
# {'Alice': 18, 'Bob': 21, 'Ann': 33}```

The zip function takes a number of iterables and aggregates them to a single one by combining the i-th values of each iterable into a tuple for every i.

(An iter-able is an object that contains multiple elements over which you can iterate. Examples are lists, sets, or tuples.)

Say, you have two lists:

```[1,2,3]
[4,5,6]```

Now you zip them together and get the new list:

`[(1,4), (2,5), (3,6)]`

Now, you know how to combine two lists into a dictionary. Watch my One-Liner explainer video that I created for the launch of my new book “Python One-Liners”.