python – Creating a dictionary from a CSV file
python – Creating a dictionary from a CSV file
Create a dictionary, then iterate over the result and stuff the rows in the dictionary. Note that if you encounter a row with a duplicate date, you will have to decide what to do (raise an exception, replace the previous row, discard the later row, etc…)
Heres test.csv:
Date,Foo,Bar
123,456,789
abc,def,ghi
and the corresponding program:
import csv
reader = csv.reader(open(test.csv))
result = {}
for row in reader:
key = row[0]
if key in result:
# implement your duplicate row handling here
pass
result[key] = row[1:]
print(result)
yields:
{Date: [Foo, Bar], 123: [456, 789], abc: [def, ghi]}
or, with DictReader:
import csv
reader = csv.DictReader(open(test.csv))
result = {}
for row in reader:
key = row.pop(Date)
if key in result:
# implement your duplicate row handling here
pass
result[key] = row
print(result)
results in:
{123: {Foo: 456, Bar: 789}, abc: {Foo: def, Bar: ghi}}
Or perhaps you want to map the column headings to a list of values for that column:
import csv
reader = csv.DictReader(open(test.csv))
result = {}
for row in reader:
for column, value in row.items(): # consider .iteritems() for Python 2
result.setdefault(column, []).append(value)
print(result)
That yields:
{Date: [123, abc], Foo: [456, def], Bar: [789, ghi]}
You need a Python DictReader class. More help can be found from here
import csv
with open(file_name.csv, rt) as f:
reader = csv.DictReader(f)
for row in reader:
print row
python – Creating a dictionary from a CSV file
Help from @phil-frost was very helpful, was exactly what I was looking for.
I have made few tweaks after that so Im would like to share it here:
def csv_as_dict(file, ref_header, delimiter=None):
import csv
if not delimiter:
delimiter = ;
reader = csv.DictReader(open(file), delimiter=delimiter)
result = {}
for row in reader:
print(row)
key = row.pop(ref_header)
if key in result:
# implement your duplicate row handling here
pass
result[key] = row
return result
You can call it:
myvar = csv_as_dict(csv_file, ref_column)
Where ref_colum will be your main key for each row.