Я пытаюсь объединить два вложенных словаря Python. Каждый из них имеет 10 клавиш на верхнем уровне, а затем каждый из 10 клавиш имеет еще 2 клавиши: «datetimes» и «values». На низком уровне каждая клавиша вложенного словаря содержит около 100 000 элементов.Как создать вложенный в Python словарь из 2 файлов pkl/объединить 2 вложенных словаря в один?
Происхождение 2 словарей из 2 файлов pkl. Я разворачиваю их на 2 словаря, используя функцию загрузки. Есть ли способ иметь 1 словарь из этих 2 файлов pkl? Если нет, то как я могу объединить 2 словаря в один?
Я пробовал this solution, но он перезаписывает один словарь за другим, и я не мог получить this solution, поскольку у меня есть словари, а не списки с индексами, как в примере. Использование .copy(), как предложено here, также перезаписывает один словарь за другим. Было бы здорово, если бы я мог просто добавить один словарь к другому, но this post, похоже, предполагает, что словари не работают так.
Итак, я подумал, что, возможно, я смогу создавать массивы из этих словарей, а затем переформатировать их и объединить. Но это невероятно медленно. Вот то, что я до сих пор:
import cPickle
import numpy as np
def load(filename, verbose=False):
# Open file
if verbose : print("Loading %s" % filename)
pkl_file = open(filename, 'rb')
# Load from Pickle file.
data = cPickle.load(pkl_file)
pkl_file.close()
return data
def combineDicts(dictList):
result = np.array([])
for listItem in dictList:
data = np.array([])
for item in listItem.keys():
for innerItem in listItem[item].keys():
data = np.append(data, listItem[item][innerItem])
result = np.append(result, data)
Так что я пытаюсь выполнить следующие команды:
>>> dict1 = load('file1.pkl', verbose = True)
>>> dict2 = load('file2.pkl', verbose = True)
>>> a = combineDicts([dict1, dict2])
sgallen, в примере, вы даете topkey1 и topkey3 является reallt то же имя, так как словари имеют одинаковые верхние ключи. Различия между ними на самом деле имеют данные за один год, а другой - данные за другой год. Поэтому, если я изменяю ваш пример следующим образом: 'dict1 = {'topkey1': {'datetimes': [9,8], 'values': [7,6]}, 'topkey2': {'datetimes': [5 , 4], 'values': [3,2]}} ' ' dict2 = {'topkey1': {'datetimes': [29,28], 'values': [17,16]}, 'topkey2' : {'datetimes': [35,34], 'values': [43,42]}} ' – Aina
, тогда вывод будет: ' {'topkey1': {'datetimes': [9,8,29,28 ], 'values': [7,6,17,16]}, 'topkey2': {'datetimes': [5,4,35,34], 'values': [3,2,43,42]} } 'Я думаю, что понимание понятий - путь, но мой 5-недельный опыт работы с Python не может меня достать. Я думаю, что ваше решение должно работать, если я каким-то образом модифицирую понимание, чтобы отразить результат, который я получаю после. Спасибо, Айна. – Aina