2011-07-29 17 views
1

ここでの最初の質問は、私が作ると思っている様々な雑多なエラーを許してください。配列内の値を持つPython辞書をCSVファイルに出力する。

私はしばらくの間、この作業に取り組んできました。私は骨抜きになっていることを認めています。私の背景が統計的な側面にあり、データがかなり明確な構造を持っているためです。私はPython 2.7で作業しています。次の問題があります。分析の最後に、NetworkXパッケージを使用して、興味のある辞書が2つあります。これをAbleとBakerと呼んでいます。

それぞれは基本的にネットワークノードの名前と値の辞書です。だから、何かのように:

ジョー:7ケイト:9マイク:3 - と - ジョー:12ケイト:4マイク:2

しかし、出力、全部私ができる一方で、この出力は、Pythonを残すために起こっており、そのような形式にかなり容易に二つの別々のファイル(と今までとなっている)、それは1つのCSVファイルとして出て来たのは本当にいいだろうとして:

ジョー、7、12
ケイト、9、 4
マイク、3、2

今、私は忍び寄っているグラム単一の辞書に結合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) 

:[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]を出力します。誰かが正しい方向に私を指すことができる?

答えて

1

あなたは名前とwriter.writerowには2つの番号のリストを含むリストを渡していると writer.writerow([node,value]) を交換してください。あなたが望むものを得るために、リストを名前と数字のリストにまとめる。簡単なアプローチ:

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

完璧な解決策、両方のあなた。ありがとう! – Fomite

2

writer.writerow([node]+value)

関連する問題