python删除列表理解中的dict键

时间:2017-04-26 11:24:25

标签: python dictionary list-comprehension

为什么以下表达式(旨在删除dict中的多个键)无效? (event是一个词典)

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

用什么代替它的最小表达式是什么?

1 个答案:

答案 0 :(得分:10)

您不应在此处使用列表理解 。列表推导非常适合构建值列表,不应用于一般循环。使用列表理解副作用是对完美的列表对象的浪费。

列表推导也是表达式,因此只能包含其他表达式。 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个对象的列表,一个你立即丢弃的列表。