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

发布于 2021-01-29 14:56:20

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

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

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

关注者
0
被浏览
79
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看