将 Python OrderedDict 写入 CSV

Posted

技术标签:

【中文标题】将 Python OrderedDict 写入 CSV【英文标题】:Write Python OrderedDict to CSV 【发布时间】:2017-04-15 14:13:48 【问题描述】:

我有一个有序的字典,正如人们所期望的那样,它包含许多键值对。我需要将有序字典的内容解析为 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,以便它们与正确的键匹配。

提前感谢您的帮助!

【问题讨论】:

试试 pandas 怎么样,处理 dict、csv、list 的非常有用的库。 你试过csv.DictWriter吗? 【参考方案1】:

好的,我将在这里回答我自己的问题。有几个人很友好地在 cmets 中提供了建议。正如建议的那样,我正在努力用 Pandas 来完成这个任务。然而,当我这样做时,我突然想到我可以做到这一点,而无需学习 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 的第一行,将值写入第二行

我确信有更优雅的方法可以做到这一点,但这对于我的目的来说已经足够了。

【讨论】:

【参考方案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())

【讨论】:

OP 不想要一个无序的字典。 OP 想要在他的 csv 中“保持有序字典的原始顺序”,这段代码就是这样做的。 使用dict()-function如何保持排序? 它是 python 3.7 中的一个语言特性 感谢您的澄清!将有关版本的信息添加到答案的文本中会很好。这个问题是在 2016 年 12 月提出的。我认为,Python 3.5 是这里的最新版本,没有任何 inserted order 在 3.6 上发挥作用的字典(没有可靠性),我认为(不是 100% 确定this) 并被 Guido 在 3.7 上视为语言功能 - 没错。 :)【参考方案3】:

这是另一个更通用的解决方案,假设您没有行列表(可能它们不适合内存)或标题副本(可能write_csv 函数是通用的):

def gen_rows():
    yield OrderedDict(a=1, b=2)

def write_csv():
    it = genrows()
    first_row = it.next()  # __next__ in py3
    with open("frequencies.csv", "w") as outfile:
        wr = csv.DictWriter(outfile, fieldnames=list(first_row))
        wr.writeheader()
        wr.writerow(first_row)
        wr.writerows(it)

【讨论】:

【参考方案4】:

Reading/Writing out a dictionary to csv file in python

展示如何使用 Pandas 编写 Dict。

import pandas as pd

d = 
   'a': (1, 101),
   'b': (2, 202),
   'c': (3, 303)

pd.DataFrame.from_dict(d, orient="index").to_csv("dict.csv")

【讨论】:

请重新格式化您的代码。 import 语句已从代码中排除

以上是关于将 Python OrderedDict 写入 CSV的主要内容,如果未能解决你的问题,请参考以下文章

python中OrderedDict的使用

python模块介绍- collections-OrderedDict 有序字典

如何将元素添加到 OrderedDict 的开头?

OrderedDict如何在Python中保持秩序

将字典快速排序到 OrderedDict [关闭]

在 python2.6 中应该使用 OrderedDict 的哪个实现?