2012-08-08 3 views
0

를 사용하여 사전에서 삭제 가능한 ...파이썬은 나는 좋은 pythonista을하고 지능형리스트를 사용하기 위해 노력하고있어 지능형리스트

하지 않는 이유는이 작품?

[del my_dict[r] for r in to_remove] 

목표는 my_dict 이 내 DICT 개체에서 목록 to_remove의 항목을 제거하는 것입니다 :

for r in to_remove: 
    del my_dict[r] 

잘 작동하지만 지능형리스트와 함께 할 것을 시도하고

+5

목록 이해 잠재적 조건을 확인, 오래된 목록에서 새 목록을 만드는 데 사용됩니다. 당신의 사용을 위해 당신은 루프를 사용해야합니다. –

+3

@andy 부팅, 모든 pythonista를 위해서 [PEP8] (http://www.python.org/dev/peps/pep-0008/)을 읽어라! –

답변

10

당신 부작용에 대한 목록 내포물을 사용하면 안됩니다.

간단한 for 루프를 대신 사용해야합니다.

8

del X은 그런 용도로 사용되지 않기 때문입니다. 구문 상 올바르지 않습니다.

그냥 :

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

+1 이것은 실제 이유가 언급 되었기 때문에 받아 들여진 대답이어야합니다. – wim

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)' –

+0

나는 방공호에게 볼 옵션 만주고있다. 나는 그것이 좋은 방법이 아니라는 것을 명백하게 언급했고, 질문은 _list comprehension_에 관한 것이었다. 그래도'set' 옵션을 주셔서 감사합니다. 전에'difference' 함수를 사용한 적이 없습니다. – Aesthete

+0

그런 식으로 세트를 사용하지 않은 경우를 대비하여 완전히 동의합니다. :) –

3
  1. 에서 제거하는 새로운 목록을 반환합니다.
  2. del은 함수가 아니므로 목록 이해의 일부로 호출 할 수 없습니다.

는 기본적으로, 단지 대신 목록을 반복 :

for r in to_remove: 
    del my_dict[r] 
관련 문제