Тройной оператор не работает в словаре для цикла - PullRequest
0 голосов
/ 27 апреля 2020

Я создаю словарь, чтобы найти все уникальные значения в определенном столбце файла и подсчитываю, сколько раз они появляются.

Следующий код работает:

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

Где ошибка в моем коде?

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Назначение: операторы , а не выражения, и поэтому не могут появляться в условном выражении. Ваша попытка анализируется как

content_ratings[c_rating] += (1 if c_rating in content_ratings
  else content_ratings[c_rating]) = 1

То есть условное выражение выбирает одно из двух значений, а не одно из двух утверждений, в результате чего результатом является недопустимое значение l для первого из двух связанных назначений.

Вместо этого используйте метод 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
0 голосов
/ 27 апреля 2020

Как насчет этого?

for app in apps_data[1:]:
    c_rating = app[10]

    content_ratings[c_rating] = content_ratings[c_rating] + 1 if c_rating in content_ratings else content_ratings[c_rating]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...