将Python字典及其值输出为CSV文件。

1 投票
2 回答
2186 浏览
提问于 2025-04-16 22:29

这是我在这里的第一个问题,请原谅我可能会犯的各种错误。

我已经在这个问题上工作了一段时间,承认自己有点困惑——字典这个概念让我有点头疼,因为我的背景更多是在统计方面,数据的结构比较明确。我正在使用Python 2.7,遇到了以下问题:在一些分析结束后,使用NetworkX这个库,我有两个字典,我称它们为Able和Baker。

这两个字典基本上都是网络节点的名称和一个值。比如说:

Joe : 7 Kate: 9 Mike: 3 -和- Joe: 12 Kate: 4 Mike: 2

但是这些输出要离开Python,虽然我可以很容易地将它们分别输出为两个文件(到现在为止我一直这样做),但如果能把它们合并成一个CSV文件,格式如下就太好了:

Joe, 7, 12
Kate, 9, 4
Mike, 3, 2

现在,我正在运行以下代码,将这两个字典合并成一个字典:

output = dict((k, [Able[k], Baker.get(k)]) for k in Able)
output.update((k, [None, Baker[k]]) for k in Baker if k not in Able)

这样我得到了接近我想要的结果,也就是一个字典,像Joe: [7, 12]。但老实说,我不知道如何让CSV写入器合作,把[7,12]输出为独立的值(也就是7,12),而不是作为数组的一部分。我得到的最接近的结果是:

net_out = open('output.csv', 'w')
writer = csv.writer(net_out, dialect='excel')
for node, value in output.items():
    writer.writerow([node,value])
net_out.close()

这会输出像Joe, [7,12]这样的行。有没有人能指点我一下正确的方向?

2 个回答

2

把这行代码

writer.writerow([node,value])

换成这行代码

writer.writerow([node]+value)

意思是说,原本你是把一个包含节点和一个值的列表写入文件,现在你要把节点和一个值的列表合并成一个新的列表再写入文件。

1

你现在把一个包含名字的列表和一个有两个数字的列表传给了 writer.writerow。为了达到你想要的效果,你需要把这个列表变得简单,只保留名字和数字。一个简单的方法是:

for node, value in output.items():
    writer.writerow([node] + value)

撰写回答