2016-08-18 55 views
2

我有一個使用字符串(編輯)作爲鍵的字典並將列表存儲爲值列表。python - 列表正在從csv作爲字符串讀入

dict = {key1: [[data1],[data2],[data3]], key2: [[data4],[data5]],...etc} 

編輯:其中數據變量是從轉換後的數據幀的熊貓

實施例包含不同的數據類型的行。

df = pd.DataFrame() 
df['City'] = ['New York','Austin','New Orleans','New Orleans'] 
df['State'] = ['NY','TX','LA','LA'] 
df['Latitude'] = [29.12,23.53,34.53,34.53] 
df['Time'] = [1.46420e+09,1.47340e+09,1.487820e+09,1.497820e+09] 

City   State Latitude Time 
New York  NY  29.12  1.46420e+09 
Austin  TX  23.53  1.47340e+09 
New Orleans LA  34.53  1.487820e+09 
New Orleans LA  34.53  1.497820e+09 

dict = {} 
cities = df['City'].unique() 
for c in cities: 
    temp = df[df['City'] == c] 
    dict[c] = temp.as_matrix().tolist() 

#which outputs this for a given key 
dict['New Orleans'] = [['New Orleans' 'LA' 34.53 1.487820e+09], 
    ['New Orleans' 'LA' 34.53 1.497820e+09]] 

我使用把它作爲一個CSV以下幾點:

reader = csv.reader(open(filename, 'r')) 
dict = {} 
for key,val in reader: 
    dict[key] = val 

VAL進來尋找完美:

filename = 'storage.csv' 
with open(filename,'w') as f: 
    w = csv.writer(f) 
    for key in dict.keys(): 
     w.writerow((key,dict[key])) 

我然後使用以下讀取文件回字典,除了它現在是一個字符串。例如,key1的是這樣的:

dict[key1] = "[[data1],[data2],[data3]]" 

我怎樣才能在讀值列表,或從刪除引號讀入val的版本?

+1

哪些變量'data1','data2'等?顯示[最小完整代碼](http://stackoverflow.com/help/mcve)。 –

+2

CSV不知道Python列表是什麼。你爲什麼不使用json? – polku

+0

假設'val'是一個表示字符串列表的字符串,那麼'd [key] = ast.literal_eval(val)'。另外,不要將您的字典命名爲'dict'。 –

回答

3

編輯:由於您使用的是pandas.DataFrame不要使用csv模塊或模塊json。相反,使用pandas.io讀取和寫入。


原來的答案:

簡短的回答:使用json

CSV適用於保存字符串表。除此之外,你需要手動將字符串轉換回Python對象。

如果你的數據只有列表,字典和基本文字如字符串和數字json將是這項工作的正確工具。

考慮:

example = {'x': [1, 2], 'y': [3, 4]} 

保存到文件:

with open('f.txt','w') as f: 
    json.dump(example, f) 

從文件加載:

with open('f.txt') as f: 
    reloaded_example = json.load(f) 
+0

這就結束了伎倆! –

1

你的代碼必須是這樣:

import csv 
import ast 
#dict = {1: [[1],[2],[3]], 2: [[4],[5]]} 
reader = csv.reader(open("storage.csv", 'r')) 
dict = {} 
for key,val in reader: 
    dict[int(key)] = ast.literal_eval(val) 
print dict 
+0

感謝您展示有用的函數'literal_eval' –

+0

@Ganesh K歡迎您 –

+0

這非常有用。我編輯了我的問題,以顯示我的列表的不同數據類型,所以它不會在這種情況下工作,但我會記住未來。 –