不能使用字典理解

问题描述

创建一个字典,其中包含给定字符串中每个字符的频率


    str1 = "peter piper picked a peck of pickled peppers"
    freq = {}
    freq2 = {}
    for c in str1:
        freq[c] = freq.get(c,0) + 1
    freq2 = {c: freq2.get(c,0) + 1 for c in str1}
    print(freq)
    print(freq2)

输出

{'p': 9,'e': 8,'t': 1,'r': 3,' ': 7,'i': 3,'c': 3,'k': 3,'d': 2,'a': 1,'o': 1,'f': 1,>'l': 1,'s': 1}

{'p': 1,'e': 1,'r': 1,' ': 1,'i': 1,'c': 1,'k': 1,'d': 1,'s': 1}

我只是想知道为什么字典理解不能给我正确的答案?

解决方法

使用字典理解进行循环时,freq2尚未更新,并且所有值都不存在,因此get返回0(并且您添加了1键的值是1 新字典 )。

仅在理解字典后,freq2就会更新(使用由字典理解创建的字典)。

步骤是:

  1. 第5行; freq2为空
  2. 在第6行;首先,通过循环freq2空字典创建一个新字典。然后,将新字典分配给freq2