запись данных в csv из словарей с несколькими значениями для каждого ключа

Фон

Я храню данные в словарях. Словари могут быть разной длины, и в конкретном словаре могут быть ключи с несколькими значениями. Я пытаюсь выплюнуть данные в файл CSV.

Проблема/решение

Изображение 1 — это то, как распечатывается мой фактический результат. Изображение 2 показывает, как я хотел бы, чтобы мой вывод действительно распечатывался. Изображение 2 – это желаемый результат.

введите здесь описание изображения введите здесь описание изображения

КОД

import csv
from itertools import izip_longest

e = {'Lebron':[25,10],'Ray':[40,15]}
c = {'Nba':5000}

def writeData():
    with open('file1.csv', mode='w') as csv_file:
        fieldnames = ['Player Name','Points','Assist','Company','Total Employes']
        writer = csv.writer(csv_file)
        writer.writerow(fieldnames)

        for employee, company in izip_longest(e.items(), c.items()):
            row = list(employee)
            row += list(company) if company is not None else ['', '']  # Write empty fields if no company

            writer.writerow(row)

writeData()

Я открыт для всех решений/предложений, которые могут помочь мне получить желаемый выходной формат.


person Dinero    schedule 26.10.2018    source источник
comment
ответ на вопрос?   -  person user1394    schedule 28.10.2018


Ответы (2)


Для более простого ответа вам просто нужно добавить одну строку кода к тому, что у вас есть:

row = [row[0]] + row[1]

so:

for employee, company in izip_longest(e.items(), c.items()):
        row = list(employee)
        row = [row[0]] + row[1]
        row += list(company) if company is not None else ['', '']  # Write empty fields if no company
person user1394    schedule 27.10.2018

from collections import defaultdict

values = defaultdict(dict)
values[Name1] = {Points: [], Assist: [], Company: blah, Total_Employees: 123}

для создания вывода пройдитесь по каждому элементу в значениях, чтобы дать вам имена, и заполните другие значения, используя key_values ​​во вложенном словаре.

Опять же, убедитесь, что нет нескольких записей с одинаковым именем, или выберите запись с уникальными записями в defaultdict.

Демо для примера-

>>> from collections import defaultdict
>>> import csv
>>> values = defaultdict(dict)
>>> vals = [["Lebron", 25, 10, "Nba", 5000], ["Ray", 40, 15]]
>>> fields = ["Name", "Points", "Assist", "Company", "Total Employes"]
>>> for item in vals:
...     if len(item) == len(fields):
...             details = dict()
...             for j in range(1, len(fields)):
...                     details[fields[j]] = item[j]
...             values[item[0]] = details
...     elif len(item) < len(fields):
...             details = dict()
...             for j in range(1, len(fields)):
...                     if j+1 <= len(item):
...                             details[fields[j]] = item[j]
...                     else:
...                             details[fields[j]] = ""
...             values[item[0]] = details
... 
>>> values
defaultdict(<class 'dict'>, {'Lebron': {'Points': 25, 'Assist': 10, 'Company': 'Nba', 'Total Employes': 5000}, 'Ray': {'Points': 40, 'Assist': 15, 'Company': '', 'Total Employes': ''}})
>>> csv_file =  open('file1.csv', 'w')
>>> writer = csv.writer(csv_file)
>>> for i in values:
...     row = [i]
...     for j in values[i]:
...             row.append(values[i][j])
...     writer.writerow(row)
... 
23
13
>>> csv_file.close()

Содержимое «file1.csv»:

Lebron,25,10,Nba,5000
Ray,40,15,,
person Akshayanti    schedule 26.10.2018
comment
можно ли это продемонстрировать? - person Dinero; 26.10.2018