2014-01-31 100 views
-1

我有一个词典列表。例如csv阅读器记忆词典列表

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" 

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

更新

这是功能我有这使我想有http://stardict.sourceforge.net/Dictionaries.php下载列表:

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类似的字符串,另一个是一个列表的字典。

+1

所有的字典都有相同的密钥吗? – dawg

+0

是的。它来自api回调。所有其他响应以xml或csv形式出现。只是我正在处理的这一个返回这个列表的字典。 – Ptrkcon

+0

将csv逐行读入列表中。只要你有这样的格式的数据,你可以轻松地做任何事情,将其转换为你的字典,总和列等... – sashkello

回答

1

使用列表理解的解决方案应该适用于任意数量的键,但前提是所有的字典都有相同的heys。

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) 
+0

我喜欢这个到目前为止。如果我想将l传递给csv.reader()会怎么样?也许我应该写信给@mgilson提到的io.BytesIO对象。我希望有一个可以打印的字符串,或者如果用户想要说出来,那么就把它保存到csv中,然后让对象准备好传递给保存函数。或者,如果他们不想保存,但想要,可以说,加起来花费的列,我可以将字符串加载到csv阅读器选项并总结l [1]值。看看我要去哪里?不知道这是否是接近它的好方法。 – Ptrkcon

+0

@Ptrkcon你有一个列表,你可以做任何事情。您可以打印列表中的任何元素(行),您可以将其保存为csv,您可以执行任何操作。列表*是您需要的对象。我的意思是,我不明白你为什么要在这里使用csv.reader,而你可以用列表完成所有相同的事情,并且以一种更简单的方式......它看起来像一个不必要的步骤(将列表转换为csv ,然后从csv读取数据到一个列表??是的,还有什么......)。 – sashkello

+0

嗯,你是对的。我正在使用csv阅读器来添加一个列,但我可以用列表来完成。我会发布我使用它的功能。让我知道是否有更简单的方法。非常感谢! – Ptrkcon

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) 
+0

我其实不想保存文件。我想把它作为一个变量。如果我想以后保存它,我可以。 – Ptrkcon

+0

@Ptrkcon - 然后不用文件,你可以写入一个'io.BytesIO'对象。 – mgilson