2012-08-08 90 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]