[英]use python list comprehension to update dictionary value
我有一个字典列表,如果键价格值等于 '',我想用 0 更新键 'price' 的值
data=[a['price']=0 for a in data if a['price']=='']
有可能做这样的事情吗? 我也试过
a.update({'price':0})
但效果不佳...
赋值是语句,语句在列表推导式中不可用。 只需使用普通的 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]
如果您使用的是 dict.update 不要将它分配给原始变量,因为它返回 None
[a.update(price=0) for a in data if a['price']=='']
没有分配将更新列表...
这是不好的做法,但可能:
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"]]
如果p["price"]
为False
、空字符串或任何其他 python 认为是False
值,则处理没有关键“price”的情况,并且 price 设置为0
。
请注意,列表理解会返回像[None]
这样的垃圾。
是的你可以。
您不能直接对 dict 使用update
,因为update
不返回任何内容,并且在这种情况下 dict 只是临时变量(在列表推导中),因此不会产生任何影响,但是,您可以将其应用于 iterable 本身,因为 iterable 是持久性变量在这种情况下。
而不是使用
[my_dict['k'] = 'v' for my_dict in iterable] # As I know, assignment not allowed in list comprehension
用
[iterable[i].update({'k': 'v'}) for i in range(len(iterable))] # You can use enumerate also
所以列表理解本身将返回无用的数据,但你的字典将被更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.