python删除列表理解中的字典键

问题描述 投票:0回答:2

为什么下面的表达式,旨在删除字典中的多个键,无效? (

event
是一个字典)

[del event[key] for key in ['selected','actual','previous','forecast']]

用什么最少的表达式来替换它?

python dictionary list-comprehension
2个回答
24
投票

您不应该在这里使用列表理解。列表推导式非常适合构建值列表,不应用于一般循环。使用列表理解来处理副作用会浪费一个完美的列表对象的内存。

列表推导式也是

表达式,因此只能包含其他表达式。 del

 是一个语句,不能在表达式中使用。

只需使用

for

循环:

# use a tuple if you need a literal sequence; stored as a constant # with the code object for fast loading for key in ('selected', 'actual', 'previous', 'forecast'): del event[key]

或者用字典理解重建字典:

# Use a set for fast membership testing, also stored as a constant event = {k: v for k, v in event.items() if k not in {'selected', 'actual', 'previous', 'forecast'}}

后者创建一个全新的字典,因此对同一对象的其他现有引用不会看到任何更改。

如果必须在表达式中使用键删除,可以使用

object.__delitem__(key)

,但这不是地方;你最终会得到一个包含 
None
 对象的列表,一个你立即丢弃的列表。


0
投票
您可以尝试以下代码:

key_to_delete = ['selected','actual','previous','forecast'] for key in keys_to_delete: del event[key]
我在我的项目中尝试过,它对我有用

© www.soinside.com 2019 - 2024. All rights reserved.