일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 클라우드컴퓨팅
- 알고리즘
- 데이터분석
- 머신러닝
- 컴퓨터공학
- I'm Sorry
- 딥러닝
- 빅데이터
- 소프트웨어공학
- 데이터과학
- 자료구조
- 코딩
- 인공지능
- 네트워크
- 프로그래밍
- 웹개발
- 자바스크립트
- 파이썬
- 컴퓨터과학
- 2
- 데이터구조
- 보안
- Yes
- 컴퓨터비전
- 소프트웨어
- 네트워크보안
- 프로그래밍언어
- 사이버보안
- 버전관리
- 데이터베이스
- Today
- Total
스택큐힙리스트
딕셔너리를 반복하면서 항목을 삭제하는 방법은 무엇인가요? 본문
파이썬에서 딕셔너리를 반복하면서 항목을 삭제할 수 있나요?
나는 새로운 딕셔너리를 만드는 것이 아니라 특정 조건을 충족시키지 못하는 요소들을 딕셔너리에서 제거하고 싶습니다. 다음은 좋은 해결책인가요? 그 외에 더 나은 방법이 있나요?
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
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'인 요소를 찾아서 삭제합니다. 여기서 해당하는 키를 삭제하면서 딕셔너리의 크기가 바뀌어도 상관없이, 리스트로 변환한 후에 반복하므로 올바르게 작동합니다.
이러한 방법으로 딕셔너리에서 요소를 반복하면서 삭제할 수 있습니다. 파이썬에서 딕셔너리를 다룰 때, 이러한 방법들을 익히고 적재적소에 사용하는 것이 중요합니다.