从Python词典求和值
问题描述:
我正在使用Python对随机星谱进行求和以增加它们的信噪比。这些频谱标题的关键字之一包含频谱的积分时间。当我对光谱进行求和时,我希望用我使用的每个光谱的积分时间之和更新所得光谱的关键字。对于这一点,我用下面的代码:从Python词典求和值
for kk in range(0,NumberOfSpectra): # main cycle
TotalIntegrationTime = 0.0
for item in RandomSpectraList: # secondary cycle
SpectrumHeader = SpectraFullList[item]['head'] #1
TotalIntegrationTime += SpectrumHeader['EXPTIME']
SpectrumHeader['EXPTIME'] = TotalIntegrationTime #2
SaveHeaderFunction(SpectrumHeader, kk)
我遇到的问题是,当主循环回路,SpectrumHeader
没有得到重置#1,当我重新分配它,并显示它有值在#2中。关于为什么发生这种情况以及如何解决它的任何想法?
NumberOfSpectra
由用户提供,RandomSpectraList
是按名称排列的随机光谱。 SpectraFullList
包含光谱并具有按键“头”和“规格”。
答
您是否知道第2行的事实,SpectrumHeader仍然指向SpectraFullList的元素?他们是真正的同一个对象。 因此,当执行第2行时,您基本上正在修改SpectraFullList。 我想这不是你想要的,它可能是你的问题的原因。
为了解决它,#2之前插入以下行:
SpectrumHeader = SpectraFullList[item]['head'].copy()
+0
就是这样!问题解决了,谢谢! – jorgehumberto 2013-04-11 13:43:27
#1应该重新分配SpectrumHeader。你能举一个简短的输入/输出例子吗? – Bitwise 2013-04-11 13:24:22
你似乎错过了'kk'的一些用法。当前的代码相当于'完成'kk次'的sum(SpectraFullList [item] ['head'] ['EXPTIME']),这可能不是你想要的。主循环的迭代之间没有任何变化。 – viraptor 2013-04-11 13:34:19
@Bitwise:我的输入将是多重拟合图像,我使用pyfits将其提取到字典中(SpectraFullList [FitsImageName] ['head'],SpectraFullList [item] ['spec'])。我得到的输出是次级环路中的SpectrumHeader ['EXPTIME']的第一个实例对于所考虑的频谱是正确的,但在以下情况下,它将是次级环路的最后一个运行的总和。 – jorgehumberto 2013-04-11 13:34:40