python - 三元运算符在字典 for 循环中不起作用
问题描述
我正在创建一个字典来查找文件某一列中的所有唯一值并计算它们出现的次数。
以下代码有效:
content_ratings = {}
for app in apps_data[1:]:
c_rating = app[10]
if c_rating in content_ratings:
content_ratings[c_rating] += 1
else:
content_ratings[c_rating] = 1
这工作正常。然而。我正在尝试使用三元运算符来做到这一点。
for app in apps_data[1:]:
c_rating = app[10]
content_ratings[c_rating] += 1 if c_rating in content_ratings else content_ratings[c_rating] = 1
我的代码中的错误在哪里?
解决方案
赋值是语句,而不是表达式,因此不能出现在条件表达式中。您的尝试被解析为
content_ratings[c_rating] += (1 if c_rating in content_ratings
else content_ratings[c_rating]) = 1
也就是说,条件表达式选择两个值之一,而不是两个语句之一,结果是两个链式赋值中的第一个的左值无效。
相反,请使用以下setdefault
方法:
content_ratings.setdefault(c_rating, 0) += 1
或使用defaultdict
:
import collections
content_ratings = collections.defaultdict(int)
for app in apps_data[1:]:
c_rating = app[10]
content_ratings[c_rating] += 1
推荐阅读
- javascript - 在 Javascript 中使用 setInterval 和 clearInterval 需要帮助
- docker - 如何将 docker compose yaml 文件转换为 Kubernetes yaml 文件以进行部署?
- arrays - 为什么我们不能在现代 C++ 中省略具有默认初始值设定项列表的数组类型成员变量的容量?
- python - Youtube 搜索并使用 bs4 获得更多 30 个结果
- html - 固定宽度并使其响应
- javascript - 如何防止 iframe 创建新的而不是
换行 - r - r - 在划分两个数据帧之前将列内容大写
- laravel - Laravel Eloquent 你能做一些类似于 hasAll 的事情吗?
- r - 在 Quantstrat 中进行优化时,运行 add.distribution 和 apply.paramset 后需要执行什么步骤才能获得输出?
- ruby-on-rails - Rails 中许多逻辑的最佳实现方式是什么?