首页 > 解决方案 > 三元运算符在字典 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

我的代码中的错误在哪里?

标签: pythonif-statementconditional-statementsoperation

解决方案


赋值是语句,而不是表达式,因此不能出现在条件表达式中。您的尝试被解析为

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

推荐阅读