web-dev-qa-db-ja.com

Python OrderedDictをCSVに書き込む

予想どおり、いくつかのキーと値のペアが含まれている順序付き辞書があります。順序付けられた辞書の内容をCSV形式に解析する必要があります。一番上の行にキーがあり、2番目の行にそれぞれの値があります。最初の行を下に持っていますが、2番目の行の書き方に迷っています。 OrderedDictの値は、期待どおりです(ターミナルに出力されたように見えます):([(a, 1), (b, 2), (c, 3)])。これが私が持っているものです:

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

値を繰り返してリストに追加しようとしましたが、リストは順序付けられた辞書の元の順序を維持していなかったため、私が知る限り、リストから値を出力するのはかなり困難でした。正しいキーと一致するようにCSVに追加します。

よろしくお願いします!

7
jguberman

了解しました。ここで自分の質問に答えます。何人かの人々はコメントで提案を提供するのに十分親切でした。提案されたように、私はパンダでこれを達成するために取り組んでいました。しかし、そうしていると、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つの空のリストを作成します

  2. 順序付けられた辞書のキーと値のペアを繰り返し処理し、各ペアをそれぞれのリストに追加します。 Pythonのリストは順序を保持するため、これにより、いずれかのリストの対応するインデックスのアイテムが一緒に属することが保証されます

  3. CSVの最初の行にキーを書き込み、2番目の行に値を書き込みます

これを行うにはもっとエレガントな方法があると確信していますが、私の目的にはこれで十分です。

6
jguberman

Python 3.7の辞書は順序を保持しているため、dict()を使用するだけで、順序付けられた辞書を使用可能な辞書に変えることができます。

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

Pythonで辞書をcsvファイルに読み取り/書き込み

パンダを使用して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")
1
shantanu pathak