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