对Python字典中的值求和
我正在使用Python对随机恒星光谱求和,以提高它们的信噪比。这些光谱标题的关键字之一包含光谱的积分时间。当我对光谱求和时,我想用我使用的每个光谱的积分时间的总和来更新结果光谱的关键字。为此,我使用以下代码:对Python字典中的值求和,python,dictionary,Python,Dictionary,我正在使用Python对随机恒星光谱求和,以提高它们的信噪比。这些光谱标题的关键字之一包含光谱的积分时间。当我对光谱求和时,我想用我使用的每个光谱的积分时间的总和来更新结果光谱的关键字。为此,我使用以下代码: for kk in range(0,NumberOfSpectra): # main cycle TotalIntegrationTime = 0.0 for item in RandomSpectraList:
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
包含光谱,并具有键“head”和“spec”。您是否知道在第2行中,SpectraFullList仍然指向SpectraFullList的一个元素?它们实际上是同一个物体。
因此,在执行第2行时,实际上是在修改SpectraFullList。
我想这不是你想要的,这可能是你的问题的原因
要解决此问题,请在#2之前插入以下行:
#1应重新分配SpectrumHeader。你能举一个输入/输出的简短例子吗?你似乎缺少了一些使用
kk
。当前代码相当于sum(对于RandomSpectraList中的项目,SpectraFullList[item]['head']['EXPTIME'])
donekk
times。。。这可能不是你想要的。主循环迭代之间没有任何变化。@按位:我的输入将是多个fits图像,我使用pyfits将它们提取到字典中(SpectraFullList[FitsImageName]['head'],SpectraFullList[item]['spec'])。我得到的结果是,二次循环中SpectrumHeader['EXPTIME']的第一个实例将是所考虑的频谱的正确实例,但在以下实例中,它将是二次循环最后一次运行的总和。@viraptor:kk将用于保存频谱的文件名,我需要随机谱的“NumberOfSpectra”和
SpectrumHeader = SpectraFullList[item]['head'].copy()