从哈希映射列表中获取值并放入一个列表中?

时间:2012-10-30 16:00:51

标签: python csv dictionary

我有列表,其中每个元素都是字典。

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);

有更多的pythonic方式吗?

3 个答案:

答案 0 :(得分:3)

使用csv.DictWriter class,它会直接为您编写值:

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)

答案 1 :(得分:1)

你可以摆脱for循环并使用列表理解:

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

请注意,由于字典是无序的,您无法预测返回不同值的顺序(这可能是一个严重的问题)。

答案 2 :(得分: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'])