0

各要素が辞書であるリストがあります。

myList = [
{mykey1:myValue1, myKey2:myValue2},
{myKey1:myValue1b, myKey2:myValue2b}
]

各エントリの値だけを含むCSVファイルが必要です。これを取得するには、各要素がコンマ区切り値の文字列であるリストが必要です。したがって、次の形式になります。

myValuesOnlyList=[ "myValue1, myValue2",
"myValue1b, myValue2b"]

これを行うために、私は次のようなことをします:

for mydict in myList:
    row = ','.join(str(e) for e in mydict.values());
    myValuesOnlyList.append(row);

これを行うためのよりPython的な方法はありますか?

4

3 に答える 3

3

csv.DictWriterclassを使用すると、値が直接書き込まれます。

fields = ('mykey1', 'mykey2', ...)
with open('output.csv', 'wb') as f:
    writer = csv.DictWriter(f, fields)
    writer.writerow({f: f for f in fields})  # write a header row
    for entry in myList:
        write.writerow(entry)
于 2012-10-30T16:04:08.040 に答える
1

ループを取り除きfor、リスト内包表記を使用できます。

[",".join(str(v) for v in d.itervalues()) for d in myList]

辞書は順序付けされていないため、異なる値が返される順序を予測できないことに注意してください (これは深刻な問題になる可能性があります)。

于 2012-10-30T16:07:39.460 に答える
0

csvモジュールを使用できます。

一般的な例:

import csv
with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
于 2012-10-30T16:03:07.033 に答える