У меня есть два больших файла рассола. У обоих хранится по одному словарю. Я не могу загрузить оба файла рассола одновременно в память, однако я хочу объединить хранящиеся в них словари и запросить этот объединенный словарь. Можно ли это сделать? См. Следующие фрагменты, чтобы подробнее узнать о моем запросе.
f1 = open('d1.pickle', 'rb')
d1 = pickle.load(f1)
# However, I can not load a second dictionary as follows in the same program
# because of memory limits
f2 = open('d2.pickle', 'rb')
d2 = pickle.load(f2)
f3 = open('d_final.pickle', 'wb')
pickle.dump({*d1, *d2}, f3)
ОБНОВЛЕНИЕ: я как-то хочу сделать более быстрые запросы в обоих этих словарях. Один из моих подходов заключался в том, чтобы сохранить оба этих словаря в одном файле tsv, а затем сохранить смещения строк как индексы ключей. Используя эти смещения, мы можем искать в этой позиции файла и получать значение. Но это кажется намного медленнее, чем запрос по словарю. См. Мою попытку. Может ли кто-нибудь прокомментировать, является ли это самым быстрым способом запроса обоих словарей?
f = open('merged_dict.tsv', 'wt')
f1 = open('d1.pickle', 'rb')
d1 = pickle.load(f1)
offsets = {}
for key in d1:
offset = f.tell()
f.write(key + '\t' + d1[key] + '\n')
offsets[key] = offset
del f1, d1
f2 = open('d2.tsv', 'rb')
d2 = pickle.load(f2)
for key in d2:
offset = f.tell()
f.write(key + '\t' + d2[key] + '\n')
offsets[key] = offset
f3 = open('dict_offets.pickle', 'wb')
pickle.dump(offsets, f3)
Теперь, когда мне нужно запросить словарь, я делаю следующее:
f = open('merged_dict.tsv', 'rt')
f1 = open('dict_offsets.pickle', 'rt')
d = pickle.load(f1)
#query the dictionary using following function.
def query_dictionary(key):
offset = d[key]
f.seek(offset)
return f.readline().split('\t')[1]
Я думаю, что проблема с производительностью при хранении словарей в виде tsv файла связана с тем, что значениями являются numpy массивы. Мне нужно преобразовать строки в массивы numpy, что может повлиять на производительность запросов.
Если это не лучший способ, кто-нибудь, пожалуйста, предложите лучший подход для этого. Еще раз, я очень озабочен эффективностью запросов. Я хочу получить значение из словаря как можно быстрее.