Zipping Two Unequal Length Lists in a Python Dictionary

In Python, zipping two lists of unequal length into a dictionary is a common requirement when working with data. When lists have different sizes, we need special techniques to handle the mismatch and create meaningful key-value pairs.

This article explores five different methods to zip unequal-length lists into dictionaries, each handling the length difference in a specific way.

Understanding the Problem

When zipping two unequal lists, we need to decide how to handle the extra elements. The most common approach is to cycle through the shorter list, repeating its values to match the longer list's length.

Method 1: Using itertools.cycle()

The cycle() function creates an infinite iterator that repeats the shorter list's elements ?

from itertools import cycle

keys = ['a', 'b', 'c', 'd', 'e']
values = [1, 2, 3, 4]

result = dict(zip(keys, cycle(values)))
print("Result:", result)
Result: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}

Method 2: Using collections.deque()

With deque(), we can rotate elements to achieve the cycling effect ?

from collections import deque

keys = ['a', 'b', 'c', 'd', 'e']
values = deque([1, 2, 3, 4])

result = {}
for key in keys:
    value = values.popleft()
    result[key] = value
    values.append(value)

print("Result:", result)
Result: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}

Method 3: Using Modulo Operator

The modulo operator cycles through indices of the shorter list ?

keys = ['a', 'b', 'c', 'd', 'e']
values = [1, 2, 3, 4]

result = {}
for i, key in enumerate(keys):
    result[key] = values[i % len(values)]

print("Result:", result)
Result: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}

Method 4: Using List Multiplication

Multiply the shorter list to match or exceed the longer list's length ?

keys = ['a', 'b', 'c', 'd', 'e']
values = [1, 2, 3, 4]

multiplier = (len(keys) + len(values) - 1) // len(values)
extended_values = values * multiplier

result = dict(zip(keys, extended_values))
print("Result:", result)
Result: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}

Method 5: Using Dictionary Comprehension

A concise approach using dictionary comprehension with modulo indexing ?

keys = ['a', 'b', 'c', 'd', 'e']
values = [1, 2, 3, 4]

result = {key: values[i % len(values)] for i, key in enumerate(keys)}
print("Result:", result)
Result: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}

Comparison

Method Memory Usage Readability Best For
itertools.cycle() Low High Simple cases
deque() Medium Medium Complex rotations
Modulo operator Low High Educational purposes
List multiplication High Medium Small lists
Dict comprehension Low High Pythonic solutions

Conclusion

Use itertools.cycle() for the most readable and memory-efficient solution. Dictionary comprehension with modulo operator offers the most Pythonic approach. Choose the method based on your specific needs and coding style preferences.

Updated on: 2026-03-27T10:18:40+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements