Доступ к словарям с именами полей - PullRequest
0 голосов
/ 01 мая 2020

У меня есть функция unpickle, которая возвращает dict как:

def unpickle(file):
with open(file, 'rb') as fo:
    dict = pickle.load(fo, encoding='bytes')
return dict

и функция, которая читает засоленный объект с именами полей (не знаю, является ли это правильным определением):

def do_sth():
    all_data = unpickle('mypickle.pickle')
    image_filenames = all_data["Filenames"]
    conditions = all_data["Labels"] 

Для краткости у меня есть два списка Filenames = ['001.png','002.png'] и Labels = ['0','1'], которые мне нужно выбрать и сохранить в mypickle.pickle, чтобы я мог вызывать их в функции do_sth. До сих пор я делал:

data = [Filenames,Labels]
with open("mypickle.pickle", "wb") as f:
pickle.dump(data, f)

и

data = dict(zip(file_paths, labels))
with open("mypickle.pickle", "wb") as f:
pickle.dump(data, f)

Но я получаю KeyError :'Filenames'. Какую структуру я должен использовать, чтобы сохранить эти 2 списка, чтобы они могли работать должным образом. Благодаря.

1 Ответ

3 голосов
/ 01 мая 2020

Измените свою функцию на

def do_sth():
    all_data = unpickle('mypickle.pickle')     
    image_filenames = all_data[0]    
    conditions = all_data[1] 

Пояснение

Вы сохранили маринад в виде списка. Когда вы загружаете рассол, это все еще список.

или

Фактически сохраните его как dict

data = {"Filenames": Filenames, "Labels": Labels}
with open("mypickle.pickle", "wb") as f:
    pickle.dump(data,  f)
...