Skip to content Skip to sidebar Skip to footer

Writing Data To Csv From Dictionaries With Multiple Values Per Key

Background I am storing data in dictionaries. The dictionaries can be off different length and in a particular dictionary there could be keys with multiple values. I am trying to s

Solution 1:

For a much simpler answer, you just need to add one line of code to what you have:

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 isnotNoneelse ['', '']  # Write empty fields if no company

Solution 2:

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

for generating the output, traverse through each item in the values to give you names, and populate other values using the key_values in the nested dict.

Again, make sure that there no multiple entries with same name, or choose the one with unique entries in the defaultdict.

Demo for the example-

>>>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:...iflen(item) == len(fields):...            details = dict()...for j inrange(1, len(fields)):...                    details[fields[j]] = item[j]...            values[item[0]] = details...eliflen(item) < len(fields):...            details = dict()...for j inrange(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()

Contents of 'file1.csv':

Lebron,25,10,Nba,5000
Ray,40,15,,

Post a Comment for "Writing Data To Csv From Dictionaries With Multiple Values Per Key"