我正在尝试在键“ 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,它是数据集中的最后一个值,因此它可以正确循环遍历它们,但是在我运行调试器时,它将始终附加在先前的值上。如何使它附加所有值,而不仅仅是替换上一个?
答案 0 :(得分:1)
我可能只了解您显示的代码的10%,但我怀疑我知道您的代码出了什么问题。
在最后一个循环的每次迭代中,您都在此行中破坏colors['UMINV']
的值:
colors['UMINV'] = np.array([])
稍后将值附加到该空数组时,它将是唯一的一个。在下一次迭代中,您将重新初始化为一个空数组,然后再附加另一个单个值。
我怀疑您希望上面的行只运行一次(或者也许每次外部循环运行一次,您的代码都非常混乱,所以我只是在猜测您的意图)。修复起来并不难,只需将其向上移动,一直到顶部附近,字典定义下方或for igood in range(...)
行上方即可。
如果您使用的词典不多,我也不确定该词典的用途是什么。如果只需要一个数组,只需使用一个简单的变量!