csv阅读器的内存列表

时间:2014-01-31 04:31:10

标签: python csv dictionary

我有一个词典列表。例如

l = [{'date': '2014-01-01', 'spent': '$3'},[{'date': '2014-01-02', 'spent': '$5'}]

我想制作这样的csv,如果我想将它保存为csv我可以。

我有其他获取列表并调用splitlines()所以我可以使用csv方法。

例如:

reader = csv.reader(resp.read().splitlines(),  delimiter=',')

如何将我的词典列表更改为类似csv文件的列表?

我一直在尝试将字典转换成字符串,但是没有多少运气。它应该像

"date", "spent"
"2014-01-01", "$3"
"2014-01-02", "$5" 

这也将帮助我以一种很好的方式为用户打印出词典列表。

更新

这是我的功能,它让我想要一个dicts列表:

def get_daily_sum(resp):
    rev = ['revenue', 'estRevenue']
    reader = csv.reader(resp.read().splitlines(),  delimiter=',')
    first = reader.next()
    for i, val in enumerate(first):
        if val in rev:
            place = i
            break
        else:
            place = None
    if place:
        total = sum(float(r[place]) for r in reader)
    else:
        total = 'Not available'
    return total

所以我想从列名列表中总计一列。问题在于"收入"专栏并不总是在同一个地方。

有更好的方法吗?我有一个对象返回类似字符串的csv,另一个返回一个dicts列表。

2 个答案:

答案 0 :(得分:2)

您可能希望使用csv.DictWriter来编写文件。

with open('outputfile.csv', 'wb') as fout:
    writer = csv.DictWriter(fout, ['date', 'spent'])
    for dct in lst_of_dict:
        writer.writerow(dct)

答案 1 :(得分:1)

使用列表推导的解决方案应适用于任意数量的密钥,但前提是所有的密钥都具有相同的密钥。

l = [[d[key] for key in dicts[0].keys()] for d in dicts]

附加列标题的键名称:

l = dicts[0].keys() + l

这将返回可以导出到csv的列表列表:

import csv
myfile = csv.writer(open("data.csv", "wb")) 
myfile.writerows(l)