问题描述
创建一个字典,其中包含给定字符串中每个字符的频率
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
就会更新(使用由字典理解创建的字典)。
步骤是:
- 第5行;
freq2
为空 - 在第6行;首先,通过循环
freq2
空字典创建一个新字典。然后,将新字典分配给freq2