多亏了这个其他线程,作为一个使用 Python 的初学者,我已经成功地将我的字典写入 csv:
Writing a dictionary to a csv file with one line for every 'key: value'
dict1 = {0 : 24.7548, 1: 34.2422, 2: 19.3290}
csv 看起来像这样:
0 24.7548
1 34.2422
2 19.3290
现在,我想知道用相同的键组织多个词典的最佳方法是什么。我希望将键作为第一列,然后是之后列中的字典值,所有这些都具有第一行以通过字典名称区分列。
当然,有很多线程试图做类似的事情,例如:Trouble writing a dictionary to csv with keys as headers and values as columns ,但没有以相同的方式构建我的数据(还......)。也许必须先合并字典。
dict2 = {0 : 13.422, 1 : 9.2308, 2 : 20.132}
dict3 = {0 : 32.2422, 1 : 23.342, 2 : 32.424}
我的理想输出:
ID dict1 dict2 dict3
0 24.7548 13.422 32.2422
1 34.2422 9.2308 23.342
2 19.3290 20.132 32.424
我还不确定键名的列名 ID
将如何在其中发挥作用。
使用 csv 模块和列表理解:
import csv
dict1 = {0: 33.422, 1: 39.2308, 2: 30.132}
dict2 = {0: 42.2422, 1: 43.342, 2: 42.424}
dict3 = {0: 13.422, 1: 9.2308, 2: 20.132}
dict4 = {0: 32.2422, 1: 23.342, 2: 32.424}
dicts = dict1, dict2, dict3, dict4
with open('my_data.csv', 'wb') as ofile:
writer = csv.writer(ofile, delimiter='\t')
writer.writerow(['ID', 'dict1', 'dict2', 'dict3', 'dict4'])
for key in dict1.iterkeys():
writer.writerow([key] + [d[key] for d in dicts])
请注意,字典默认是无序的,因此如果您希望键按升序排列,则必须对键进行排序:
for key in sorted(dict1.iterkeys(), key=lambda x: int(x)):
writer.writerow([key] + [d[key] for d in dicts])
如果您需要处理无法确定所有字典都具有相同键的情况,您需要更改一些小东西:
with open('my_data.csv', 'wb') as ofile:
writer = csv.writer(ofile, delimiter='\t')
writer.writerow(['ID', 'dict1', 'dict2', 'dict3', 'dict4'])
keys = set(d.keys() for d in dicts)
for key in keys:
writer.writerow([key] + [d.get(key, None) for d in dicts])