Запись в файл CSV списка словарей Python разной длины
Имеется список словарей:
my_list = [{'color': 'red', 'size':'medium', 'cost': 3000},
{'color': 'blue', 'cost': 200},
{'size':'big','color': 'black', 'count': 20, 'active': True}]
Как записать данный список словарей в файл CSV так, чтобы все возможные значения ключей были заголовками, значения словарей были строками? При этом нужно распределить значения по столбцам в соответствии со значением ключа. В ячейках, для стобцов которых в словаре нет ключа необходимо оставить пустое значение.
Ответы (2 шт):
Автор решения: Владислав Харламов
→ Ссылка
Если количество заголовков неизвестно заранее, можно так:
my_list = [{'color': 'red', 'size':'medium', 'cost': 3000},{'color': 'blue', 'cost': 200},{'size':'big','color': 'black', 'count': 20, 'active': True}]
set_columns = set()
for d in my_list:
for key in d:
set_columns.add(key)
for d in my_list:
for column in set_columns:
if not column in d:
d[column] = None
print(my_list)
# [{'color': 'red', 'size': 'medium', 'cost': 3000, 'active': None, 'count': None},
# {'color': 'blue', 'cost': 200, 'size': None, 'active': None, 'count': None},
# {'size': 'big', 'color': 'black', 'count': 20, 'active': True, 'cost': None}]
Автор решения: Andrey
→ Ссылка
Для удобства записи словарей в CSV в Python есть csv.DictWriter. Но перед его использованием нужно будет получить набор всех уникальных ключей словарей.
import csv
my_list = [{'color': 'red', 'size':'medium', 'cost': 3000},
{'color': 'blue', 'cost': 200},
{'size':'big','color': 'black', 'count': 20, 'active': True}]
# Получаем набор заголовков
columns = set(i for d in my_list for i in d)
# {'active', 'color', 'cost', 'count', 'size'}
with open('out.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=columns)
writer.writeheader() # Пишем заголовок
for row in my_list:
writer.writerow(row)