Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
