스택큐힙리스트

딕셔너리를 반복하면서 항목을 삭제하는 방법은 무엇인가요? 본문

카테고리 없음

딕셔너리를 반복하면서 항목을 삭제하는 방법은 무엇인가요?

스택큐힙리스트 2023. 4. 4. 21:29
반응형

파이썬에서 딕셔너리를 반복하면서 항목을 삭제할 수 있나요?

나는 새로운 딕셔너리를 만드는 것이 아니라 특정 조건을 충족시키지 못하는 요소들을 딕셔너리에서 제거하고 싶습니다. 다음은 좋은 해결책인가요? 그 외에 더 나은 방법이 있나요?

for k, v in mydict.items():

if k == val:

del mydict[k]

답변 1

파이썬 3+에 대해:

>>> mydict

{'four': 4, 'three': 3, 'one': 1}

>>> for k in list(mydict.keys()):

... if mydict[k] == 3:

... del mydict[k]

>>> mydict

{'four': 4, 'one': 1}

다른 답변들은 Python 2에서 문제 없이 작동하지만 Python 3에서는 RuntimeError 에러를 일으킵니다.

런타임 에러: 반복 중에 사전 크기가 변경되었습니다.

이것은 mydict.keys() 가 목록이 아니라 반복자를 반환하기 때문에 발생합니다.

댓글에서 지적한대로 list(mydict.keys()) 으로 mydict.keys() 를 목록으로 변환하면 작동해야합니다.

파이썬 2 버전을 위해서:

콘솔에서 간단한 테스트를 하면 이터레이션 중에 사전을 수정할 수 없음을 확인할 수 있습니다.

>>> mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}

>>> for k, v in mydict.iteritems():

... if k == 'two':

... del mydict[k]

------------------------------------------------------------

Traceback (most recent call last):

File , line 1, in

RuntimeError: dictionary changed size during iteration

delnan의 대답에서 언급했듯이 항목을 삭제하면 반복자가 다음 항목으로 이동하려고 할 때 문제가 발생합니다. 대신 keys() 방법을 사용하여 키 목록을 가져와 작업하십시오.

>>> for k in mydict.keys():

... if k == 'two':

... del mydict[k]

>>> mydict

{'four': 4, 'three': 3, 'one': 1}

만약 항목 값에 따라 삭제해야 한다면, 대신 items() 방법을 사용하세요.

>>> for k, v in mydict.items():

... if v == 3:

... del mydict[k]

>>> mydict

{'four': 4, 'one': 1}

답변 2

딕셔너리는 파이썬에서 유용하게 사용되는 데이터 타입 중 하나입니다. 그러나 딕셔너리에 대해 이해하고 있는 것만으로는 충분하지 않습니다. 딕셔너리에서 요소를 삭제하려면 어떻게 해야 할까요? 그것도 반복하면서 삭제하려면 어떻게 해야 할까요? 이 문제에 대한 해결책을 이번 기회에 알아보겠습니다.

먼저, 파이썬 딕셔너리를 다루는 방법을 살펴볼 필요가 있습니다. 딕셔너리는 키와 값이 쌍을 이루는 자료형입니다. 딕셔너리를 만들 때 중괄호({})를 사용하며, 각 요소는 쉼표로 구분됩니다. 예를 들어, {'apple': 1, 'banana': 2, 'orange': 3}와 같이 키와 값이 쌍을 이루는 요소들로 이루어진 딕셔너리가 있습니다.

딕셔너리에서 요소를 삭제하는 방법은 del 연산자를 사용하는 것입니다. del 딕셔너리[키]와 같이 사용하며, 해당하는 키가 있는 요소가 삭제됩니다. 예를 들어, 위의 딕셔너리에서 'apple'을 삭제하려면 del 딕셔너리['apple']과 같이 입력하면 됩니다.

그러나 문제는 딕셔너리를 반복하면서 삭제하는 경우입니다. 이 경우, 딕셔너리의 크기가 줄어들기 때문에 반복이 올바르게 작동하지 않을 수 있습니다. 이 문제를 해결하기 위해 파이썬은 dict.items()와 같은 메소드를 제공합니다. 이 메소드를 사용하면 딕셔너리의 각 요소를 (키, 값) 쌍으로 반환합니다.

딕셔너리에서 요소를 반복하면서 삭제하기 위해 다음과 같은 코드를 작성할 수 있습니다.

```

for key, value in list(딕셔너리.items()):

if key == 'apple':

del 딕셔너리[key]

```

이 코드는 딕셔너리를 반복하면서 키가 'apple'인 요소를 찾아서 삭제합니다. 여기서 해당하는 키를 삭제하면서 딕셔너리의 크기가 바뀌어도 상관없이, 리스트로 변환한 후에 반복하므로 올바르게 작동합니다.

이러한 방법으로 딕셔너리에서 요소를 반복하면서 삭제할 수 있습니다. 파이썬에서 딕셔너리를 다룰 때, 이러한 방법들을 익히고 적재적소에 사용하는 것이 중요합니다.

반응형
Comments