多亏了另一个线程,我才以Python初学者的身份成功地将字典写到了csv中:将字典写到 csv文件中,每个“键:值”一行]
dict1 = {0 : 24.7548, 1: 34.2422, 2: 19.3290}
csv看起来像这样:
0 24.7548 1 34.2422 2 19.3290
现在,我想知道用相同的键组织多个词典的最佳方法是什么。我希望将键作为第一列,然后在其后的各列中使用dict值,所有这些都具有第一行以按字典名称区分各列。
当然,有很多线程试图做类似的事情,例如:用键作为标题和值作为列向csv编写字典很麻烦,但是数据结构却不一样(还…)。也许词典必须先合并。
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键名的列名将如何工作。
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])