Распарсить словари в таблицу
К примеру, даны словари с данными:
pers1 = {"Surname": "Ivanov", "Child": 3, "Age": "18"}
pers2 = dict([("Surname", "Petrov"), ("Name", "Ivan"), ("Age", "56")])
pers3 = dict([("Surname", "Sidorov"), ("Child", 1), ("Name", "Sergey")])
Как эти данные перенести в таблицу, чтобы получилось так:
A | B | C | D |
---|---|---|---|
pers1 | pers2 | pers3 | |
Surname | Ivanov | Petrov | Sidorov |
Name | Ivan | Sergey | |
Age | 18 | 56 | |
Child | 1 | 3 |
Ответы (3 шт):
Например используя Pandas:
import pandas as pd
# Данные из словарей
pers1 = {"Surname": "Ivanov", "Child": 3, "Age": "18"}
pers2 = dict([("Surname", "Petrov"), ("Name", "Ivan"), ("Age", "56")])
pers3 = dict([("Surname", "Sidorov"), ("Child", 1), ("Name", "Sergey")])
# Получаем имена переменных из locals()
names = [name for name in locals() if name.startswith('pers')]
# Создаем список словарей
data = [locals()[name] for name in names]
# Создаем DataFrame
df = pd.DataFrame(data, index=names)
# Транспонируем DataFrame, чтобы ключи стали индексами строк
df = df.T
# Заполняем отсутствующие значения NaN
df.fillna('', inplace=True)
# Задаем нужный порядок строк
desired_order = ['Surname', 'Name', 'Age', 'Child']
df = df.reindex(desired_order)
# Выводим таблицу (Вы можете записать в data.xlsx)
print(df)
output:
(.venv) PS C:\KWORK> & c:/KWORK/.venv/Scripts/python.exe c:/KWORK/MyUserBot/ruSo.py
pers1 pers2 pers3
Surname Ivanov Petrov Sidorov
Name Ivan Sergey
Age 18 56
Child 3.0 1.0
from pyexcelerate import Workbook
pers1 = {"Name": "Ivanov", "Child": 3, "Age": "18"}
pers2 = dict([("Name", "Petrov"), ("Surname", "Ivan"), ("Age", "56")])
pers3 = dict([("Name", "Sidorov"), ("Child", 1), ("Surname", "Sergey")])
# Список словарей
data = [pers1, pers2, pers3]
# Создаем Workbook и Worksheet
wb = Workbook()
ws = wb.new_sheet("Лист1")
# Записываем заголовки
headers=["Name","Surname","Child","Age"]
## Здесь можно переписать все ключи-заголовки, но порядок не могу определить
# for dict_pers in data:
# for dict_key in dict_pers:
# headers.append(dict_key)
#headers = []
# headers = list(set(headers))
# print(headers)
#Первый столбик заголовки
for row, header in enumerate(headers, 1):
ws.set_cell_value(row, 1, header)
# Записываем данные
for row, header in enumerate(headers, 1):
for col, pers in enumerate(data, 2):
ws.set_cell_value(row, col, pers.get(header, " "))
# Сохраняем файл
wb.save("pers.xlsx")
Я, глядя на данные, не смог сдержать улыбку. Имена перепутаны с фамилиями, 18-летний Иванов имеет 3 ребёнка (!), а у Петрова нет даже их нуля. Любой, хоть сколько-нибудь грамотный и умелый менеджер, скажет, что характеристики - это колонки, почти всегда, а субъекты учёта - в данном случае люди - строки. Иначе, сколько субъектов сможет вместить такая таблица и насколько она будет читабельна? В правильно спроектированной таблице можно будет нормально и сортировать по колонкам, и устанавливать фильтры, и даже без напрягов сохранить в csv для использования в других программах.
Я покажу пример такого алгоритма (потребуется установка модуля openpyxl):
import os
import openpyxl
# Данные
person1 = {"Фамилия": "Иванов", "Имя": "Иван", "Дети": 3, "Возраст": 28}
person2 = {"Фамилия": "Петров", "Имя": "Пётр", "Дети": 0, "Возраст": 18}
person3 = {"Фамилия": "Сидоров", "Имя": "Сидор", "Дети": 1, "Возраст": 25}
citizens = [person1, person2, person3]
# Создание Excel файла
wb = openpyxl.Workbook() # книга
ws = wb.active # активный лист
ws.append(list(citizens[0].keys())) # запись заголовка
for person in citizens: ws.append(list(person.values())) # запись данных
wb.save("citizens.xlsx") # сохранение файла
print("\nНажмите любую клавишу для продолжения...")
os.system("pause > nul")
Пример полностью готов, сохраните текст как .py, установите openpyxl и можете тестировать и адаптировать для себя.