繁体   English   中英

使用python列表理解更新字典值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM