Python program to convert Dict of list to CSV

A dictionary of lists is a common data structure where each key maps to a list of values. Converting this structure to CSV format is useful for data analysis and sharing tabular data.

Here's an example of a dictionary of lists ?

data = {
    'numbers': [1, 2, 3, 4, 5, 6],
    'states': ['UP', 'Tamil Nadu', 'Telangana', 'Gujarat', 'UP', 'Tamil Nadu'],
    'cities': ['Agra', 'Chennai', 'Hyderabad', 'Surat', 'Lucknow', 'Coimbatore']
}
print(data)
{'numbers': [1, 2, 3, 4, 5, 6], 'states': ['UP', 'Tamil Nadu', 'Telangana', 'Gujarat', 'UP', 'Tamil Nadu'], 'cities': ['Agra', 'Chennai', 'Hyderabad', 'Surat', 'Lucknow', 'Coimbatore']}

When converted to CSV format, this data becomes a tabular structure where keys become column headers and list values form rows ?

numbers,states,cities
1,UP,Agra
2,Tamil Nadu,Chennai
3,Telangana,Hyderabad
4,Gujarat,Surat
5,UP,Lucknow
6,Tamil Nadu,Coimbatore

Using the csv Module

The csv module provides built-in methods for writing CSV files. We use writerow() for headers and writerows() with zip() to transpose the data ?

import csv

def dict_to_csv_builtin(data, filename):
    """Convert dictionary of lists to CSV using csv module"""
    keys = list(data.keys())
    values = list(data.values())
    
    with open(filename, 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(keys)  # Write headers
        writer.writerows(zip(*values))  # Write data rows

# Sample data
data = {
    'numbers': [1, 2, 3, 4, 5],
    'colors': ['red', 'green', 'yellow', 'blue', 'brown'],
    'fruits': ['apple', 'avocado', 'pineapple', 'blueberry', 'date']
}

print("Input Dictionary:", data)
dict_to_csv_builtin(data, 'output_csv.csv')
print("CSV file created successfully!")

# Read and display the CSV content
with open('output_csv.csv', 'r') as f:
    content = f.read()
    print("\nCSV Content:")
    print(content)
Input Dictionary: {'numbers': [1, 2, 3, 4, 5], 'colors': ['red', 'green', 'yellow', 'blue', 'brown'], 'fruits': ['apple', 'avocado', 'pineapple', 'blueberry', 'date']}
CSV file created successfully!

CSV Content:
numbers,colors,fruits
1,red,apple
2,green,avocado
3,yellow,pineapple
4,blue,blueberry
5,brown,date

How zip(*values) Works

The zip(*values) function transposes the data from column-wise to row-wise format ?

# Understanding zip(*values)
values = [[1, 2, 3], ['red', 'green', 'blue'], ['apple', 'banana', 'cherry']]

print("Original values (column-wise):")
for i, col in enumerate(values):
    print(f"Column {i}: {col}")

print("\nAfter zip(*values) (row-wise):")
for i, row in enumerate(zip(*values)):
    print(f"Row {i}: {row}")
Original values (column-wise):
Column 0: [1, 2, 3]
Column 1: ['red', 'green', 'blue']
Column 2: ['apple', 'banana', 'cherry']

After zip(*values) (row-wise):
Row 0: (1, 'red', 'apple')
Row 1: (2, 'green', 'banana')
Row 2: (3, 'blue', 'cherry')

Using Pandas Library

Pandas provides a more convenient approach using DataFrame.to_csv(). It automatically handles the conversion and offers more formatting options ?

import pandas as pd

def dict_to_csv_pandas(data, filename):
    """Convert dictionary of lists to CSV using pandas"""
    df = pd.DataFrame(data)
    df.to_csv(filename, index=False)
    return df

# Sample data
data = {
    'nums': [1, 2, 3, 4, 5, 6],
    'states': ['UP', 'Tamil Nadu', 'Telangana', 'Gujarat', 'UP', 'Tamil Nadu'],
    'cities': ['Agra', 'Chennai', 'Hyderabad', 'Surat', 'Lucknow', 'Coimbatore']
}

print("Input Dictionary:", data)
df = dict_to_csv_pandas(data, 'output_pandas.csv')
print("\nDataFrame created:")
print(df)

# Display CSV content
with open('output_pandas.csv', 'r') as f:
    content = f.read()
    print("\nCSV Content:")
    print(content)
Input Dictionary: {'nums': [1, 2, 3, 4, 5, 6], 'states': ['UP', 'Tamil Nadu', 'Telangana', 'Gujarat', 'UP', 'Tamil Nadu'], 'cities': ['Agra', 'Chennai', 'Hyderabad', 'Surat', 'Lucknow', 'Coimbatore']}

DataFrame created:
   nums      states       cities
0     1          UP         Agra
1     2  Tamil Nadu      Chennai
2     3   Telangana    Hyderabad
3     4     Gujarat        Surat
4     5          UP      Lucknow
5     6  Tamil Nadu   Coimbatore

CSV Content:
nums,states,cities
1,UP,Agra
2,Tamil Nadu,Chennai
3,Telangana,Hyderabad
4,Gujarat,Surat
5,UP,Lucknow
6,Tamil Nadu,Coimbatore

Comparison

Method Dependencies Best For Additional Features
csv module Built-in Simple conversions Custom delimiters, quoting
Pandas External library Data analysis workflows Data manipulation, formatting

Handling Unequal List Lengths

When dictionary lists have different lengths, pandas handles it gracefully by filling missing values with NaN ?

import pandas as pd

# Dictionary with unequal list lengths
data_unequal = {
    'short': [1, 2],
    'medium': [10, 20, 30],
    'long': [100, 200, 300, 400]
}

df = pd.DataFrame(data_unequal)
print("DataFrame with unequal lengths:")
print(df)
DataFrame with unequal lengths:
   short  medium   long
0    1.0      10    100
1    2.0      20    200
2    NaN      30    300
3    NaN     NaN    400

Conclusion

Use the csv module for simple conversions with built-in Python capabilities. Choose pandas for complex data manipulation and when working within data analysis workflows. Both methods effectively convert dictionary of lists to CSV format.

Updated on: 2026-03-27T13:51:10+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements