3

我正在努力成为一个好的 pythonista 并在可能的情况下使用列表推导......

为什么这不起作用?

[del my_dict[r] for r in to_remove]

to_remove目标是从我的 dict 对象中删除列表中的条目my_dict

for r in to_remove:
  del my_dict[r]

工作正常,但我试图用列表推导来做到这一点

4

5 回答 5

15

您不应该对副作用使用列表推导,它不是 pythonic。

应该使用一个简单的 for 循环。

于 2012-08-08T10:02:12.763 回答
11

因为del X是一个不应该那样使用的语句。它在语法上是不正确的。

只是:

for r in to_remove:
    del my_dict[r]
于 2012-08-08T10:02:43.160 回答
4
  1. 你没有从这里的列表理解中获得任何东西,因为你不是在寻找一个新的列表。
  2. del 不是一个函数,所以你不能将它作为列表理解的一部分来调用。

基本上,只需遍历列表即可:

for r in to_remove:
    del my_dict[r]
于 2012-08-08T10:09:38.197 回答
0

可以这样做,但我会听 jamylak 的。当然,这是返回一个列表,而不是从中删除my_dict

my_dict = [x for x in my_dict if x not in to_remove]
于 2012-08-08T10:05:03.573 回答
0

你可以这样做:

[my_dict.pop(r) for r in to_remove]

.pop返回已删除键的值,它会比del见这里)慢一点,而不是最“pythonic”的方式来做到这一点。所以你可能不应该像其他人建议的那样。

于 2020-07-17T20:10:07.787 回答