使用python list comprehension来更新字典值

use*_*162 11 python dictionary

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

data=[a['price']=0 for a in data if a['price']=='']
Run Code Online (Sandbox Code Playgroud)

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

a.update({'price':0})
Run Code Online (Sandbox Code Playgroud)

但是效果不好......

Mar*_*zer 20

赋值是语句,语句在列表推导中不可用.只需使用正常的for循环:

data = ...
for a in data:
    if a['price'] == '':
        a['price'] = 0
Run Code Online (Sandbox Code Playgroud)

为了完整起见,你也可以使用这种可憎的东西(但这并不意味着你应该这样做):

data = ...

[a.__setitem__('price', 0 if a['price'] == '' else a['price']) for a in data]
Run Code Online (Sandbox Code Playgroud)

  • 不,你 ** 真的** 不应该使用列表理解。您正在构建一个“无”引用列表,然后立即再次丢弃该列表。这是对周期和内存的浪费。列表推导式应该只在*创建列表对象时*使用,而不是作为一般的 `for` 循环的替代。 (2认同)
  • 随意编辑答案的那部分,但我真的不认为我暗示这是一个好主意。如果你需要它,它可以完成。 (2认同)

小智 8

如果您使用的是 dict.update 不要将它分配给原始变量,因为它返回 None

[a.update(price=0) for a in data if a['price']=='']
Run Code Online (Sandbox Code Playgroud)

没有分配将更新列表...