python - 为什么这个 Python 字典理解不能用于计算 input() 中的单词?
问题描述
我必须计算一个词在一个句子中使用了多少次。我找到了解决方案,但是我希望代码更简洁,并希望使用字典理解来解决它。有人可以帮我理解以下代码有什么问题吗?
user_input = input().lower().split()
usage_dict = dict()
usage_dict = {word:usage_dict.get(word, 0) + 1 for word in user_input}
print(usage_dict)
输入 :a aa abC aa ac abc bcd a
输出 :{'a': 1, 'aa': 1, 'abc': 1, 'ac': 1, 'bcd': 1}
预期输出:{'a': 2, 'aa': 2, 'abc': 2, 'ac': 1, 'bcd': 1}
解决方案
问题
dict-comprehension 结束后usage_dict
创建字典,没有 dict 临时状态的概念,所以总是给 0usage_dict.get(word, 0)
这仅在 for 循环中起作用:
usage_dict = {}
for word in user_input:
usage_dict[word] = usage_dict.get(word, 0) + 1
解决方案
采用list.count()
usage_dict = {word: user_input.count(word) for word in set(user_input)}
使用collections.Counter
which 使用与上面相同的 for 循环
usage_dict = Counter(user_input)
推荐阅读
- mysql - 如何使用 HeidiSQL 通过 SSH 隧道连接到 MySQL unix socket?
- javascript - 如何将鼠标悬停在多个表格单元格上?
- google-chrome - HTML是否可以禁用自动完成“信用卡不支持消息”?
- r - 根据R中的关键字提取文本
- javascript - 更新被定义为较大对象中的变量引用位置的 JS 对象的一部分
- powershell - 具有数组属性的 Powershell pscustomobject 到 Csv 文件
- c# - 使用 google Api 编辑谷歌文档,无需在 c# 中上传到谷歌驱动器
- bootstrap-vue - 即使启用了 Bootstrap-Vue B-Form-Checkbox 也不会对点击做出反应
- android - Android上的TextView X + Y滚动
- node.js - npm firstline 包不返回第一行(字符串)而是一个 promise 对象,如何获取第一行字符串?