将值追加到字典会不断替换先前的值

时间:2020-04-16 19:23:37

标签: python numpy

我正在尝试在键“ 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 个答案:

答案 0 :(得分:1)

我可能只了解您显示的代码的10%,但我怀疑我知道您的代码出了什么问题。

在最后一个循环的每次迭代中,您都在此行中破坏colors['UMINV']的值:

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

稍后将值附加到该空数组时,它将是唯一的一个。在下一次迭代中,您将重新初始化为一个空数组,然后再附加另一个单个值。

我怀疑您希望上面的行只运行一次(或者也许每次外部循环运行一次,您的代码都非常混乱,所以我只是在猜测您的意图)。修复起来并不难,只需将其向上移动,一直到顶部附近,字典定义下方或for igood in range(...)行上方即可。

如果您使用的词典不多,我也不确定该词典的用途是什么。如果只需要一个数组,只需使用一个简单的变量!