【问题标题】:Trouble with iteratively creating a dictionary迭代创建字典的麻烦
【发布时间】:2020-03-03 21:05:22
【问题描述】:

我玩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_0 dict,以便我们测试您的代码。
  • 在内部 for 循环的每次迭代中,您都会覆盖 Chrom_Freq[i],因此您将得到最后一个值,即{'G+': 25.96*(2**8)}
  • 啊是的@Tomerikoo 说得有道理,我会继续考虑的
  • @rdas 预期结果是修改字典的字典,每个字典包含与字典相同的键但修改值

标签: python dictionary for-loop python-2.x


【解决方案1】:

Chrom_Freq[i] 的每个赋值都会替换上一个赋值的值。

如果key存在的话,为了积累内容你需要更新现有的:

if i in Chrom_Freq:
     Chrom_Freq[i].update({note : freq*(2**i)})
else:
     Chrom_Freq[i] = {note : freq*(2**i)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多