После объединения двух словарей подключи из полученного словаря являются беспорядочными.Подключами являются месяцы ['jan', 'feb', 'mar', ..., 'dec'].В некоторых случаях исходный словарь может не содержать подраздел (месяц), поэтому вывод будет дезориентирован при слиянии.
Так что у меня есть два словаря со следующей структурой {Model:{'Jan':[1], 'Feb':[2], Jun: [5], ...}
Какв этом примере вы можете видеть, что некоторые подразделы (месяцы) не представлены, поэтому они не могут быть найдены в исходных комментариях.Но мне нужен объединенный диктат для сохранения ежемесячного порядка, не имеет значения, как выглядели оригинальные диктанты.
Функция слияния:
def merge_dicts(dict1, dict2):
'''Marge two dicts by adding up (accumulating) values in each key.
Returns: A merge (addition) of two dictionaries by adding values of same keys
'''
# Merge dictionaries and add values of same keys
out = {**dict1, **dict2}
for key, value in out.items():
if key in dict1 and key in dict2:
out[key] = [value, dict1[key]]
#Things got harder, out[key] appends in list of list of list... no itertools can help here.
lst = [] #the one dimensional list to fix the problem of list of list with out[key]
for el in out[key]:
try:
#if inside out[key] there is a list of list we split it
for sub_el in el:
lst.append(sub_el)
except:
#if inside out[key] there is only a single float
lst.append(el)
#Replace the old key with the one dimensional list
out[key] = lst
return out
Как я сливаю это:
for c in range(len([*CMs_selection.keys()])):
if c == 0:
#First merge, with dict0 & dict1
merged_dict = {cm:merge_dicts(CMs_selection[[*CMs_selection.keys()][c]][cm], CMs_selection[[*CMs_selection.keys()][c + 1]][cm])
for cm in CMs_selection[[*CMs_selection.keys()][0]]}
elif c > 0 and c < (len(years) - 1):
#Second merge to n merge, starting with dict_merged and dict 2
merged_dict = {cm:merge_dicts(merged_dict[cm], CMs_selection[[*CMs_selection.keys()][c + 1]][cm])
for cm in CMs_selection[[*CMs_selection.keys()][0]]}
Прямо сейчас, после попытки всех возможных слияний, я получаю этот результат всегда.
{'Model1': {'Jan': [-0.0952586755156517,
0.1015196293592453,
-0.10572463274002075],
'Oct': [-0.02473766915500164,
0.0678798109292984,
0.08870666474103928,
-0.06378963589668274],
'Nov': [-0.08730728179216385,
0.013518977910280228,
0.023245899006724358,
-0.03917887806892395],
'Jul': [-0.07940272241830826, -0.04912888631224632, -0.07454635202884674],
'Dec': [-0.061335086822509766, -0.0033914903178811073, 0.09630533307790756],
'Mar': [0.029064208269119263, 0.11327305436134338, 0.009556809440255165],
'Apr': [-0.04433680325746536, -0.08620205521583557],
'Jun': [-0.036688946187496185, 0.05543896555900574, -0.07162825018167496],
'Aug': -0.03712410107254982,
'Sep': [0.007421047426760197, 0.008665643632411957],
'Feb': [-0.02879650704562664, 0.013025006279349327]},
'Model2': {'Feb': -0.05173473060131073,
'Jun': [-0.09126871824264526,
-0.09009774029254913,
0.10458160936832428,
-0.09445420652627945,
-0.04294373467564583],
'Aug': [-0.07917020469903946, 0.011026041582226753],
'Oct': [-0.10164830088615417, ....
....
С беспорядочными месяцами.Пожалуйста, помогите мне!