2013-04-11 99 views
0

我正在使用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包含光谱并具有按键“头”和“规格”。

+0

#1应该重新分配SpectrumHeader。你能举一个简短的输入/输出例子吗? – Bitwise 2013-04-11 13:24:22

+0

你似乎错过了'kk'的一些用法。当前的代码相当于'完成'kk次'的sum(SpectraFullList [item] ['head'] ['EXPTIME']),这可能不是你想要的。主循环的迭代之间没有任何变化。 – viraptor 2013-04-11 13:34:19

+0

@Bitwise:我的输入将是多重拟合图像,我使用pyfits将其提取到字典中(SpectraFullList [FitsImageName] ['head'],SpectraFullList [item] ['spec'])。我得到的输出是次级环路中的SpectrumHeader ['EXPTIME']的第一个实例对于所考虑的频谱是正确的,但在以下情况下,它将是次级环路的最后一个运行的总和。 – jorgehumberto 2013-04-11 13:34:40

回答

1

您是否知道第2行的事实,SpectrumHeader仍然指向SpectraFullList的元素?他们是真正的同一个对象。 因此,当执行第2行时,您基本上正在修改SpectraFullList。 我想这不是你想要的,它可能是你的问题的原因。

为了解决它,#2之前插入以下行:

SpectrumHeader = SpectraFullList[item]['head'].copy() 
+0

就是这样!问题解决了,谢谢! – jorgehumberto 2013-04-11 13:43:27