迭代创建字典时遇到问题
Trouble with iteratively creating a dictionary
我玩python只是为了学习。我有一本字典
chrom_freq_0
{'A': 27.5,
'A+': 29.14,
'B': 30.87,
'C': 16.35,
'C+': 17.32,
'D': 18.35,
'D+': 19.45,
'E': 20.6,
'F': 21.83,
'F+': 23.12,
'G': 24.5,
'G+': 25.96}
我想将其作为自身的多个修改版本(以及自身的原始版本)包含在另一本词典中,但我不知道如何正确迭代。它只包括每个版本修改后的字典字典中的最后一项。
这是我的代码
Chrom_Freq = {0 : chrom_frq_0}
for i in range (1, 9):
for note, freq in chrom_freq_0.iteritems():
Chrom_Freq[i] = {note : freq*(2**i)}
我明白了:
Chrom_Freq
--->
{0: {'A': 27.5,
'A+': 29.14,
'B': 30.87,
'C': 16.35,
'C+': 17.32,
'D': 18.35,
'D+': 19.45,
'E': 20.6,
'F': 21.83,
'F+': 23.12,
'G': 24.5,
'G+': 25.96},
1: {'G+': 51.92},
2: {'G+': 103.84},
3: {'G+': 207.68},
4: {'G+': 415.36},
5: {'G+': 830.72},
6: {'G+': 1661.44},
7: {'G+': 3322.88},
8: {'G+': 6645.76}}
对 Chrom_Freq[i]
的每个赋值都会替换上一个赋值的值。
如果键存在,为了积累你需要更新现有内容的内容:
if i in Chrom_Freq:
Chrom_Freq[i].update({note : freq*(2**i)})
else:
Chrom_Freq[i] = {note : freq*(2**i)}
我玩python只是为了学习。我有一本字典
chrom_freq_0
{'A': 27.5,
'A+': 29.14,
'B': 30.87,
'C': 16.35,
'C+': 17.32,
'D': 18.35,
'D+': 19.45,
'E': 20.6,
'F': 21.83,
'F+': 23.12,
'G': 24.5,
'G+': 25.96}
我想将其作为自身的多个修改版本(以及自身的原始版本)包含在另一本词典中,但我不知道如何正确迭代。它只包括每个版本修改后的字典字典中的最后一项。
这是我的代码
Chrom_Freq = {0 : chrom_frq_0}
for i in range (1, 9):
for note, freq in chrom_freq_0.iteritems():
Chrom_Freq[i] = {note : freq*(2**i)}
我明白了:
Chrom_Freq
--->
{0: {'A': 27.5,
'A+': 29.14,
'B': 30.87,
'C': 16.35,
'C+': 17.32,
'D': 18.35,
'D+': 19.45,
'E': 20.6,
'F': 21.83,
'F+': 23.12,
'G': 24.5,
'G+': 25.96},
1: {'G+': 51.92},
2: {'G+': 103.84},
3: {'G+': 207.68},
4: {'G+': 415.36},
5: {'G+': 830.72},
6: {'G+': 1661.44},
7: {'G+': 3322.88},
8: {'G+': 6645.76}}
对 Chrom_Freq[i]
的每个赋值都会替换上一个赋值的值。
如果键存在,为了积累你需要更新现有内容的内容:
if i in Chrom_Freq:
Chrom_Freq[i].update({note : freq*(2**i)})
else:
Chrom_Freq[i] = {note : freq*(2**i)}