将Python OrderedDict写入CSV

时间:2016-12-01 03:35:07

标签: python csv dictionary ordereddictionary

我有一个有序的字典,正如人们所料,它包含许多键值对。我需要将有序字典的内容解析为CSV格式,其中键位于顶行,其各自的值位于第二行。我排第一行了,但我对如何写第二行感到茫然。 OrderedDict中的值是您期望的(在终端中打印出来的内容):([(a, 1), (b, 2), (c, 3)])。这就是我所拥有的:

import csv
with open("frequencies.csv", "w") as outfile:
    csvwriter = csv.writer(outfile)
    csvwriter.writerow(myDict)

我尝试迭代这些值并将它们附加到列表中,但是列表并没有维护有序字典的原始顺序,据我所知,这会使打印非常困难从列表到CSV的值,以便它们与正确的键匹配。

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:5)

好的,我将在这里回答我自己的问题。有几个人很友好地在评论中提出建议。正如所建议的那样,我正在努力与熊猫一起完成这项工作。然而,就在我这样做的时候,我想到我可以做到这一点,而无需了解Pandas模块的来龙去脉。这就是我想出的:

import csv

keys, values = [], []

for key, value in myOrderedDict.items():
    keys.append(key)
    values.append(value)       

with open("frequencies.csv", "w") as outfile:
    csvwriter = csv.writer(outfile)
    csvwriter.writerow(keys)
    csvwriter.writerow(values)

所以这里发生了什么:

  1. 创建两个与我的有序词典中的键和值对应的空列表

  2. 迭代我的有序字典中的键/值对,将每对添加到其各自的列表中。因为Python中的列表保留了它们的顺序,所以这可以确保列表中相应索引的项目属于一起

  3. 将密钥写入我的CSV的第一行,将值写入第二行

  4. 我确信有更优雅的方法可以做到这一点,但这足以达到我的目的。

答案 1 :(得分:2)

从Python 3.7开始,字典保留顺序,因此您只需使用dict()将有序字典变成可用字典即可​​。

with open("frequencies.csv", "w") as outfile:
    csvwriter = csv.writer(outfile)
    csvwriter.writerow(dict(myDict))
    csvwriter.writerow(dict(myDict).values())

答案 2 :(得分:0)

这是另一个更通用的解决方案,假设您没有行列表(可能它们不适合内存)或标题的副本(可能df[~df.iloc[:,:-1].duplicated()] Out[53]: 0 1 2 3 4 5 6 0 0 12 1 99 23 2 75 2 5 12 1 99 23 2 66 函数是通用):

write_csv

答案 3 :(得分:0)

Reading/Writing out a dictionary to csv file in python

显示如何使用Pandas编写Dict。

将pandas导入为pd

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