2014-01-31 97 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