Простая синтаксическая ошибка в Python, если другое понимание

У меня есть набор и словарь, а значение = 5

v = s = {'a', 'b', 'c'} d = {'b':5 //<--new value} 

Если ключ «b» в словаре d, например, находится в наборе s, тогда я хочу, чтобы это значение было равно новому значению, когда я возвращаю определение dict или 0, если ключ в наборе s не находится в словаре d. Так что это мой код, чтобы сделать это, где s ['b'] = 5, и мой новый словарь …

 {'a':0, 'b':5, 'c':0} 

Я написал объяснение дикта

 { k:d[k] if k in d else k:0 for k in s} ^ SyntaxError: invalid syntax 

Зачем?! Я так разъярен, что не работает. Это как вы делаете, если еще в python, не так ли?

Так жаль всех. Для тех, кто посетил эту страницу, я изначально положил {k: d [k], если k in v else k: 0 для k в v}, а s ['b'] = 5 было просто представлением, которое создавал новый словарь i ключ «b», равный 5, но это не так, потому что вы не можете повторить такой набор.

Так что повторить v и s равны. Они просто означают вектор и набор.

  • плавающая точка в python дает неправильный ответ
  • Использование нескольких версий Python
  • Как определить метакласс Python с помощью Boost.Python?
  • Python 3 Ошибка памяти Zipfile. ожидаемый аргумент строки, полученный 'bytes'
  • Переносной метакласс между python2 и python3
  • Как я могу конвертировать 24 часа в 12 часов?
  • Видимость модулей расширения os.environ до C
  • Что такое символ @ @ в Python?
  • 4 Solutions collect form web for “Простая синтаксическая ошибка в Python, если другое понимание”

    Расширенная форма того, что вы пытаетесь достичь, – это

     a = {} for k in v: a[k] = d[k] if k in d else 0 

    где d[k] if k in d else 0 – версия тернарного оператора Python . Видеть? Вам нужно отбросить k: из правой части выражения:

     {k: d[k] if k in d else 0 for k in v} # ≡ {k: (d[k] if k in d else 0) for k in v} 

    Вы можете написать это кратко, как

     a = {k: d.get(k, 0) for k in d} 
     In [82]: s = {'a', 'b', 'c'} In [83]: d = {'b':5 } In [85]: {key: d.get(key, 0) for key in s} Out[85]: {'a': 0, 'b': 5, 'c': 0} 

    Это должно решить вашу проблему:

     >>> dict((k, d.get(k, 0)) for k in s) {'a': 0, 'c': 0, 'b': 5} 

    Вы не можете использовать тернарное выражение для пары name: value, потому что пара name: value не является значением.

    Вы можете использовать выражение if для значения или ключа отдельно, что, по-видимому, именно то, что вы хотите здесь:

     {k: (d[k] if k in v else 0) for k in v} 

    Однако это глупо. Вы делаете for k in v , поэтому каждый k находится в v по определению. Возможно, вы хотели этого:

     {k: (d[k] if k in v else 0) for k in d} 
    Python - лучший язык программирования в мире.