将列表的dict写入csv,指定列顺序

时间:2015-07-13 16:28:45

标签: python csv dictionary

我正在做以下事情:

import csv 
d={'a':(1,2,3), '2':(4,5,6), '3':(7,8,9)}

csv_file = open('test.csv','w')
writefile = csv.writer(csv_file)
writefile.writerow(d.keys())

with open('test.csv', "wb") as outfile:
   writer = csv.writer(outfile)
   writer.writerow(d.keys())
   writer.writerows(zip(*d.values()))

这会导致.csv文件我可以使用更多工具进行处理。 不幸的是,dict不包含任何关于键的顺序。 dict中的一个列表包含时间值。我希望首先在csv中有这个列表。关于其他列的顺序我不在乎。 但我不知道如何实现这一功能。

先谢谢

3 个答案:

答案 0 :(得分:2)

如果您需要记住键 - 值对的顺序,则可以创建有序词典。

https://docs.python.org/2/library/collections.html#ordereddict-objects

答案 1 :(得分:1)

collections包中包含一个OrderedDict类,可以保证键的顺序和值在访问它们时与创建它们时相同。所以你可以这样做:

from collections import OrderedDict
d = OrderedDict([('a', (1,2,3)), ('2', (4,5,6)), ('3', (7,8,9))])
...rest of your code...

请注意,OrderedDict是使用元组列表而不是字典构造的。这是因为我们需要保证保存我们写入键和值的顺序。

答案 2 :(得分:0)

Python dict键按其哈希值排序。如果您想了解更多信息,可以查看来自PyCon 2010的这个精彩视频:https://www.youtube.com/watch?v=C4Kc8xzcA68

您可以将密钥排序到列表中,然后使用该列表访问值:

sorted_keys = sorted(d.keys()) # use this instead of d.keys()
sorted_values = (d[k] for k in sorted_keys) # use this instead of d.values()
相关问题