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

使用python列表理解更新字典值,python,dictionary,Python,Dictionary,我有一个字典列表,如果键价格值等于“”,我想将键“价格”的值更新为0 有可能做那样的事吗?我也试过了 a.update({'price':0}) 但也不起作用…赋值是语句,语句在列表理解中不可用。只需使用普通for循环: data = ... for a in data: if a['price'] == '': a['price'] = 0 为了完整起见,你也可以使用这个讨厌的词(但这并不意味着你应该): 这是一种不好的做法,但也有可能: import operat

我有一个字典列表,如果键价格值等于“”,我想将键“价格”的值更新为0

有可能做那样的事吗?我也试过了

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

但也不起作用…

赋值是语句,语句在列表理解中不可用。只需使用普通for循环:

data = ...
for a in data:
    if a['price'] == '':
        a['price'] = 0
为了完整起见,你也可以使用这个讨厌的词(但这并不意味着你应该):


这是一种不好的做法,但也有可能:

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
,则处理没有键“price”的情况,并将price设置为
0
,这是一个空字符串或python认为是
False
的任何其他值


请注意,如果使用dict.update,列表理解会返回垃圾,如
[None]
,不要将其分配给原始变量,因为它不会返回任何值

[a.update(price=0) for a in data if a['price']=='']
如果没有作业,将更新列表…

是的,您可以

您不能直接对dict使用
update
,因为
update
在本例中不返回任何内容,并且dict只是临时变量(在列表理解中),因此不会产生任何影响,但是您可以将其应用于iterable本身,因为在本例中iterable是持久性变量

而不是使用

[my_dict['k'] = 'v' for my_dict in iterable]  # As I know, assignment not allowed in list comprehension
使用


因此,列表理解本身将返回无用的数据,但您的DICT将被更新。

如果a['price']=''”,您不能使用
data=[a['price']=0表示输入数据,这是用于识别列表,而不是更改列表。不,您确实不应该使用列表理解。您正在构建一个
None
引用列表,然后立即丢弃该列表。那是对周期和记忆的浪费。列表理解应该只在创建列表对象时使用,而不是作为一般循环的
替代。请随意编辑答案的这一部分,但我真的不认为这是一个好主意。如果你需要的话可以做。你已经注意到了这一点,但你真的不应该使用列表理解。您正在构建一个
None
引用列表,然后立即丢弃该列表。那是对周期和记忆的浪费。列表理解应该只在创建列表对象时使用,而不是作为一般循环的
的替代品。这很有趣。我总是觉得“有义务”使用列表理解而不是for..loops,因为我认为它们更有效。我想我把它和发电机混淆了。
[a.update(price=0) for a in data if a['price']=='']
[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