Я пытаюсь сделать остаточный график для нескольких разных фильтров. У меня есть около 23 фильтров, чтобы беспокоиться о том, что всего 23 графика. Предполагается, что каждый график представляет собой остаточную стоимость в сравнении с красным смещением галактики. Для этого я хотел использовать словарь, в котором были списки для каждого фильтра и их остаточное значение для всех галактик, с которыми я работаю. Что-то вроде
resid = {}
resid[VIMOSV]['resid'] = 0.4, 0.2, 0.7, 1.1, 0.9
resid[VIMOSV]['z'] = 1.1, 1.0, 0.9, 0.8, 1.2
, так что ключом для моего словаря остатков является имя фильтра, а затем еще один ключ, чтобы вызвать остаточные значения или значения z. Вот как на самом деле выглядит мой код:
resid = {}
residval = ((residfiledat[iline]['tempa_zprior'] - residfiledat[iline]['flux_cat'])
/ residfiledat[iline]['flux_cat'])
if key in resid:
resid[key]['resid'] = np.append(resid[key]['resid'], residval)
resid[key]['z'] = np.append(resid[key]['z'],
zdat[clustname[iclust]]['spec_z'][goodindx[clustname[iclust]][igood]])
print('key:' , key , 'exists', resid[key])
else:
#now make the dictionary entry because it doesn't exist
resid[key]['resid'] = np.array([])
resid[key]['z'] = np.array([])
resid[key]['resid'] = np.append(resid[key]['resid'], residval)
resid[key]['z'] = np.append(resid[key]['z'],
zdat[clustname[iclust]]['spec_z'][goodindx[clustname[iclust]][igood]])
print('key created', key, resid[key])
Значения остатка взяты из предыдущего l oop, который, как я знаю, работает. Моя ошибка исходит из оператора else: 'Трассировка keyerror (последний вызов был последним) else: остаток [ключ] [' остаток '] = np.array ([]) keyerror:' FOURSTARKs '
Я посмотрел его и это в основном говорит мне, что ключ не существует, но это был весь смысл утверждения else. Если ключ существует, добавьте к нему значения, иначе: создайте ключ. Я явно не знаю, как добавить ключ в словарь, который должен содержать список, чтобы справка была бы потрясающей.