Использовать понимание списка python для обновления значения словаря

У меня есть список словарей и вы хотите обновить значение для ключевой "цены" с 0, если ключевое значение цены равно "

data=[a['price']=0 for a in data if a['price']=='']

Можно ли сделать что-то подобное? Я пробовал также с

a.update({'price':0})

но не сработал...

Ответ 1

Задания - это утверждения, и утверждения не могут использоваться внутри понятий списка. Просто используйте обычный цикл for:

data = ...
for a in data:
    if a['price'] == '':
        a['price'] = 0

И ради полноты, вы также можете использовать эту мерзость (но это не значит, что вы должны):

data = ...

[a.__setitem__('price', 0 if a['price'] == '' else a['price']) for a in data]

Ответ 2

Это плохая практика, но возможная:

import operator

l = [
    {'price': '', 'name': 'Banana'},
    {'price': 0.59, 'name': 'Apple'},
    {'name': 'Cookie', 'status': 'unavailable'}
]

[operator.setitem(p, "price", 0) for p in l if "price" in p and not p["price"]]

Случаи, в которых не обрабатывается ключевая "цена", а цена устанавливается в 0, если p["price"] равен False, пустой строке или любому другому значению, которое python рассматривает как False.

Обратите внимание, что понимание списка возвращает мусор, как [None].

Ответ 3

если вы используете dict.update, не присваивайте его исходной переменной, поскольку она возвращает None

[a.update(price=0) for a in data if a['price']=='']

без назначения обновит список...