python - 不使用字典理解
问题描述
创建一个字典,其中包含给定字符串中每个字符的频率
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}
我只是想知道为什么字典理解没有给我正确的答案?
解决方案
当使用字典理解进行循环时,freq2
尚未更新并且所有值都不存在,因此get
返回0
(并且您将1
分配给键的值添加1
到新字典中)。
只有在字典理解之后,freq2
才会更新(使用字典理解创建的字典)。
步骤是:
- 在第 5 行;
freq2
是空的 - 在第 6 行;首先,通过循环
freq2
空字典创建一个新字典。然后,将该新字典分配给freq2
推荐阅读
- c# - 将日期时间设置为晚上 11:59:59
- css - 与现代 CSS 兼容的 Maven 的 CSS 缩小器
- javascript - Javascript 在 DOM 中查找给定 div 及其内容的出现
- google-chrome - Strange Bug in Chrome 69.0.3497.81 + spring boot security + vaadin when uploading files
- asp.net-mvc - 如何在 Visual Studio 2017 的 .cshtml 文件中展开/折叠?
- python - Python小写列表理解在似乎正确时未能通过测试?
- azure - Azure 函数部署失败,因为 function.json 错误
- python - 为 python 日志添加文件格式化程序
- mysql - phpmyadmin doesn't respond after timeout. What can I do?
- r - What is the standard way to set default paths for function arguments in R packages?