首页 > 解决方案 > 不使用字典理解

问题描述

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


    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, 't': 1, 'r': 1, ' ': 1, 'i': 1, 'c': 1, 'k': 1, 'd': 1, 'a': 1, 'o': 1, 'f': 1, >'l': 1, 's': 1}

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

标签: pythonpython-3.xdictionarydictionary-comprehension

解决方案


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

只有在字典理解之后,freq2才会更新(使用字典理解创建的字典)。

步骤是:

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

推荐阅读