Использовать понимание списка 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']=='']
без назначения обновит список...