我有一个有序的字典,正如人们所料,它包含许多键值对。我需要将有序字典的内容解析为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的值,以便它们与正确的键匹配。
提前感谢您的帮助!
答案 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)
所以这里发生了什么:
创建两个与我的有序词典中的键和值对应的空列表
迭代我的有序字典中的键/值对,将每对添加到其各自的列表中。因为Python中的列表保留了它们的顺序,所以这可以确保列表中相应索引的项目属于一起
将密钥写入我的CSV的第一行,将值写入第二行
我确信有更优雅的方法可以做到这一点,但这足以达到我的目的。
答案 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")