当前位置: 首页 > 面试题库 >

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

慎峻
2023-03-14
问题内容

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

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

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


问题答案:

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

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



 类似资料:
  • 问题内容: 有一个字典列表,我想删除具有相同键和值对的字典。 对于此列表: 我想退掉这个: 另一个例子: 对于此列表: 我想退掉这个: 问题答案: 尝试这个: 该策略是将字典列表转换为元组列表,其中元组包含字典项。由于可以对元组进行散列,因此你可以使用删除重复项set(在这里使用,这将是更老的python替代品,然后,使用来从元组中重新创建字典dict。 哪里: l 是原始清单 d 是列表中的词典

  • 问题内容: 如果我有词典列表,请说: 并且我想删除具有2(或name )的字典,以编程方式解决此问题的最有效方法是什么(也就是说,我不知道列表中条目的索引,因此它可以)只是被弹出)。 问题答案: 编辑 :由于对此代码的性能提出了一些疑问(一些基于对Python的性能特征的误解,一些基于超出给定规范的假设,即列表中仅存在一个dict,其key的值为2) id”),我希望在此方面给您保证。 在旧的Li

  • 我有以下示例数据作为Python中的listobject。 我如何从这个列表中删除tour_url描述;或者我怎么能只保留名称和leagueid密钥。我试过很多种解决办法,但似乎都不起作用。 第二个问题:我如何过滤这个列表?与MySQL一样: 请对python像一个新人一样对待我,因为我真的是。

  • 问题内容: 我在玩一些python循环。我对使用“ for”循环非常熟悉: 您还可以使用循环创建一个简单列表: 然后我最近在Stack上发现了一种不错的高效循环类型来构建一个列表(这种类型的循环有名称吗?我真的很想知道,以便可以对其进行更好地搜索): 好的,话虽如此,我想进一步讲解最后一种循环,我尝试使用相同的逻辑类型构建python字典: 而不是使用: 我在等号上收到一条错误消息,告诉我这是无效

  • 问题内容: 如果嵌套字典前面没有键,我现在可以删除重复项。我可以使用此功能的字典列表的一个示例是: 但是,我希望能够根据键和该词典中关联的所有值删除重复项。因此,如果内部有相同的键但值不同,则我不想删除它,但是如果有完整的副本,则将其删除。 我该怎么做呢?谢谢。 问题答案: 要从字典列表中删除重复项,请执行以下操作:

  • 问题内容: 我喜欢Python列表理解语法。 可以用来创建字典吗?例如,通过遍历键和值对: 问题答案: 从Python 2.7和3开始,你应该只使用语法: 在Python 2.6和更早版本中,内置函数可以接收键/值对的迭代,因此你可以将其传递给列表推导或生成器表达式。例如: 但是,如果你已经具有可迭代的键key/value,则根本不需要使用任何理解-最简单的方法是直接调用内置函数: