2016-08-18 2 views
2

У меня есть словарь, который использует строки (редактировать) в качестве ключей и сохраняет списки списков в качестве значений.python - списки считываются из csv как строки

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

EDIT: где переменные данных являются строки, содержащие различные типы данных из преобразованных панд DataFrame

Ex.

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, используя следующие:

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

Затем я прочитал файл обратно в словарь, используя следующее:

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

вал приходит в поисках совершенной , за исключением того, что теперь это строка. например, key1 выглядит следующим образом:

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

Как я могу читать значения в виде списков или удалить кавычки из считанных версии Вала?

+1

Какие переменные 'data1',' data2', и т.д.? Показать [минимальный полный код] (http://stackoverflow.com/help/mcve). –

+2

CSV не знает, что такое список python. Почему бы вам не использовать json? – polku

+0

Предполагая, что 'val' - это строка, представляющая список строк, тогда' d [key] = ast.literal_eval (val) '. Кроме того, не называйте словарь 'dict'. –

ответ

3

Edit: Поскольку вы используете 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

Это очень полезно. Я отредактировал свой вопрос, чтобы показать различные типы данных моих списков, чтобы он не работал в этом случае, но я буду помнить о будущем. –

Смежные вопросы