Добавление значений в словарь продолжает заменять предыдущее значение - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь добавить значения в свой словарь под ключом «UMINV», что, похоже, и делает. Проблема в том, что он продолжает заменять значения, которые были там ранее.

colpath = '/home/jacob/PHOTOMETRY/RESTFRAME_COLOURS/'    


goodcolindx = {}
colfiledat = {}
colors = {}

for iclust in range(len(clustname)):    

    filepath = catpath + clustname[iclust] + "_totalall_" + extname[iclust] + ".cat"
    photdat[clustname[iclust]] = ascii.read(filepath) 
    filepath = zpath + "compilation_" + clustname[iclust] + ".dat"
    zdat[clustname[iclust]] = ascii.read(filepath)

    colfilepath = colpath + 'RESTFRAME_MASTER_' + clustname[iclust] + '_indivredshifts.cat'

    colfiledat[clustname[iclust]] = ascii.read(colfilepath)  

    goodcolindx[clustname[iclust]] = np.where((colfiledat[clustname[iclust]]['REDSHIFTUSED'] > 0.9) & \
                                              (colfiledat[clustname[iclust]]['REDSHIFTUSED'] < 1.5) & \
                                              (photdat[clustname[iclust]]['totmask'] == 0) & \
                                           (photdat[clustname[iclust]]['K_flag'] == 0) & \
                    ((zdat[clustname[iclust]]['quality'] == 3) | (zdat[clustname[iclust]]['quality'] == 4)))
    goodcolindx[clustname[iclust]] = goodcolindx[clustname[iclust]][0]

    for igood in range(len(goodcolindx[clustname[iclust]])):

        colors['UMINV'] = np.array([])
        print(colfiledat[clustname[iclust]]['UMINV'][goodcolindx[clustname[iclust]][igood]])
        colors['UMINV'] = np.append(colors['UMINV'], colfiledat[clustname[iclust]]['UMINV'][goodcolindx[clustname[iclust]][igood]])
        print(colors)

Оператор print в конце выводит 1.859, что является последним значением в наборе данных, поэтому он корректно просматривает их, но он продолжает добавляться к предыдущему значению, когда я запускаю отладчик. Как мне сделать так, чтобы он добавлял все значения, а не просто заменял предыдущий?

1 Ответ

1 голос
/ 16 апреля 2020

Я понимаю только 10% кода, который вы показываете, но я подозреваю, что знаю, что не так с вашим кодом.

На каждой итерации последней l oop вы теряете значение colors['UMINV'] с этой строкой:

colors['UMINV'] = np.array([])

Когда вы позже добавите значение к этому пустому массиву, оно будет единственным. На следующей итерации вы повторно инициализируете пустой массив перед добавлением еще одного отдельного значения.

Я подозреваю, что вы хотите, чтобы строка выше выполнялась только один раз (или, возможно, один раз за запуск внешнего l oop, вашего кода). довольно запутанно, поэтому я только догадываюсь о ваших намерениях). Это не сложно исправить, просто переместите его вверх по файлу, либо полностью вверху, чуть ниже определения словаря, или чуть выше строки for igood in range(...).

Я также не уверен, что использовать этот словарь, на самом деле, если вы не используете более одного ключа в нем. Просто используйте простую переменную, если вам нужен только один массив!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...