2012-08-08 95 views
0

删除我想成为一个好pythonista和使用列表理解如果可能的话...Python从字典应用列表解析

为什么不这项工作?

[del my_dict[r] for r in to_remove] 

的目标是从我的字典对象my_dict 这在列表中删除to_remove的条目:

for r in to_remove: 
    del my_dict[r] 

工作正常,但我想用列表内涵做

+5

列表理解用于从一个旧列表创建一个新的列表,可能检查的条件。为了您的使用,您应该使用循环。 – 2012-08-08 10:05:04

+3

@andy引导,并为所有pythonista的缘故,阅读[PEP8](http://www.python.org/dev/peps/pep-0008/)! – 2012-08-08 10:15:05

回答

10

你不应该使用列表理解副作用,这不是pythonic。

应该使用简单的for循环。

8

因为del X是一个声明,不打算这样使用。它在语法上不正确。

刚:

for r in to_remove: 
    del my_dict[r] 
+2

+1这应该是公认的答案,因为它提到了真正的原因 – wim 2013-01-29 23:54:25

0

可能做到这一点,但我听jamylak。当然还有此函数返回一个列表,而不是从my_dict

my_dict = [x for x in my_dict if x not in to_remove] 
+0

这也可以通过集合来完成,例如, 'set(my_dict.keys())。difference(to_remove)' – 2012-08-08 10:08:24

+0

我只是给OP一个选项来看看。我明确提到这不是一个好的做法,问题在于_list理解_。不过感谢'set'选项,我以前从来没有使用'差异'功能。 – Aesthete 2012-08-08 10:12:07

+0

完全同意,刚刚评论过你没有以这种方式使用套装:) – 2012-08-08 10:13:59

3
  1. 你不能获得从这里列表理解任何东西删除,因为你一个新的列表后不是。
  2. del不是一个函数,所以你不能将它作为列表理解的一部分来调用它。

基本上,只要遍历列表,而不是:

for r in to_remove: 
    del my_dict[r]