Reading/Writing out a dictionary to csv file in python

荒凉一梦 提交于 2019-12-04 19:27:06


Pretty new to python, and the documentation for csv files are a bit confusing.

I have a dictionary that looks like the following:

key1: (value1, value2)

key2: (value1, value2)

key3: (value1, value2) ....

I would like to write these out to a csv file in the format where each line contains the key, followed by the two values.

I would also like to be able to read them back into a dictionary from the file at a later date.


I didn't find enough benefit to use Pandas here since the problem is simple.

Also note to OP, if you want to store values to a file just for reading it back simply use JSON or Python's shelve module. Exporting to CSV should be minimised only when we need to interact potentially Excel users.

The below code converts a dict into CSV

value1 = 'one'
value2 = 'two'
d = { 
        'key1': (value1, value2), 
        'key2': (value1, value2), 
        'key3': (value1, value2)
CSV ="\n".join([k+','+','.join(v) for k,v in d.items()]) 
#You can store this CSV string variable to file as below
# with open("filename.csv", "w") as file:
    # file.write(CSV)

This code explains what happens inside the list comprehension.

CSV = ""
for k,v in d.items():
    line = "{},{}\n".format(k, ",".join(v))
print CSV 


I highly recommend Pandas for this.

Convert to Pandas DataFrame:

import pandas as pd

d = {
    'a': (1, 101),
    'b': (2, 202),
    'c': (3, 303)
df = pd.DataFrame.from_dict(d, orient="index")

Create a CSV file:


Read the CSV file back as a DataFrame:

df = pd.read_csv("data.csv", index_col=0)

Convert the DataFrame back to the original dictionary format:

d = df.to_dict("split")
d = dict(zip(d["index"], d["data"]))

EDIT: Since you mention that your goal to use the output file in Excel, Pandas to_excel() and read_excel() might be more useful to you since they better-preserve the content between conversions. Also, you might want skip Excel altogether and use the standard Python scientific stack.


I would use pandas, it can be done in one line:

import pandas as pd

dic = {'key1':['v1','v2'], 'key2':['vv','gg']}

pd.DataFrame(dic).T.reset_index().to_csv('myfile.csv', header=False, index=False)