python - if语句的顺序不同时返回键错误的原因?
问题描述
代码和上下文:
关于数据探索练习的 Python 课程简介。Applestore.csv 包含有关应用商店中应用程序的数据,任务是创建一个字典,其中包含作为键的年龄等级和作为值的频率。
opened_file = open('AppleStore.csv')
from csv import reader
read_file = reader(opened_file)
apps_data = list(read_file)
content_ratings={}
for rows in apps_data[1:]:
c_rating=rows[10]
if c_rating in content_ratings==false:
content_ratings.update({c_rating:1})
else:
content_ratings[c_rating]+=1
print(content_ratings)
我不明白为什么上面给了我一个关键错误,而下面的工作正常:
opened_file = open('AppleStore.csv')
from csv import reader
read_file = reader(opened_file)
apps_data = list(read_file)
content_ratings={}
for rows in apps_data[1:]:
c_ratings=rows[10]
if c_ratings in content_ratings:
content_ratings[c_ratings]+=1
else:
content_ratings.update({c_ratings:1})
print(content_ratings)
在上述情况下,我相信我的意思是如果 c_rating 不作为键存在,则更新字典以生成键值对,只需将值加 1。
在第二种情况下,我相信我是说如果键已经存在,则将 1 添加到值中,否则使用键值对更新字典。
为什么后者比前者更有效?
解决方案
c_rating in content_ratings==false
永远不会是真的。Python中的这些运算符链:相当于c_rating in content_ratings and content_ratings==false
你可以写
if (c_rating in content_ratings) == False:
但正确的写法是
if c_rating not in content_ratings:
更好的是,您可以将整个 if/else 替换为
content_rating[c_rating] = content_rating.get(c_rating, 0) + 1
推荐阅读
- javascript - 如何将 src 路径从 json 文件添加到 vue 组件中
- python - 用于从一组闭环平面轮廓创建三角形网格的 Python 实现
- ios - iOS 应用程序为用户相关请求发送 RESTful API 的令牌是什么?
- discord.py-rewrite - 需要帮助修复石头剪刀布命令中的某个错误 | Discord.py 重写
- python - python在列表中循环
- mysql - 无法读取 nodejs 和 mysql 中未定义的属性“查询”
- c# - 如何构建具有反向参数位置的多级路由?
- python - 来自数据框的数值范围的python pandas数据透视表
- github - GitHub 页面出现 400 错误,完全空白
- java - 通过 Security.addProvider() 和 Cipher.getInstance() 指定提供者是多余的吗?