파이썬

[Python] 'for' 루프를 사용하여 사전 반복

zooheon 2022. 7. 31. 14:07
반응형
d = {'x': 1, 'y': 2, 'z': 3}

for key in d:
    print(key, 'corresponds to', d[key])

key파이썬 은 사전에서 읽기만 하면 된다는 것을 어떻게 인식 합니까? 특별한 키워드 입니까 key, 아니면 단순히 변수입니까?

 

key변수 이름일 뿐입니다.

for key in d:

키와 값이 아닌 사전의 키를 반복합니다. 키와 값을 모두 반복하려면 다음을 사용할 수 있습니다.

Python 3.x의 경우:

for key, value in d.items():

Python 2.x의 경우:

for key, value in d.iteritems():

직접 테스트하려면 단어 key를 로 변경하십시오 poop.

Python 3.x에서 iteritems()는 단순히 로 대체되었습니다 items(). 이는 dict에 의해 뒷받침되는 집합과 같은 뷰를 반환 iteritems()하지만 더 좋습니다. 이것은 2.7에서도 사용할 수 있습니다 viewitems().

이 작업 items()은 2와 3 모두에서 작동하지만 2에서는 사전 쌍 목록을 반환하며 호출 (key, value)후에 발생하는 사전의 변경 사항을 반영하지 않습니다 . items()3.x에서 2.x 동작을 원하면 을 호출할 수 있습니다 list(d.items()).

 

키가 특별한 단어가 아니라 사전이 반복자 프로토콜을 구현한다는 것입니다. 클래스에서 이것을 할 수 있습니다. 예를 들어 클래스 반복자를 작성하는 방법에 대해서는 이 질문 을 참조하십시오.

사전의 경우 C 수준에서 구현됩니다. 자세한 내용은 PEP 234 에서 확인할 수 있습니다 . 특히 "Dictionary Iterators" 섹션은 다음과 같습니다.

  • 사전은 사전의 키를 반복하는 효율적인 반복자를 반환하는 tp_iter 슬롯을 구현합니다. [...] 이것은 우리가 쓸 수 있음을 의미합니다

    for k in dict: ...
    

    와 동일하지만 훨씬 빠릅니다.

    for k in dict.keys(): ...
    

    루프 또는 다른 스레드에 의한 사전 수정에 대한 제한을 위반하지 않는 한.

  • 다른 종류의 반복자를 명시적으로 반환하는 메서드를 사전에 추가합니다.

    for key in dict.iterkeys(): ...
    
    for value in dict.itervalues(): ...
    
    for key, value in dict.iteritems(): ...
    

    for x in dict의 줄임말 이라는 뜻입니다 for x in dict.iterkeys().

Python 3에서 dict.iterkeys(), dict.itervalues()dict.iteritems()는 더 이상 지원되지 않습니다. 대신 dict.keys(), dict.values()를 사용하십시오 dict.items().

 

dict여기에서 볼 수 있듯이 특정 순서 없이 키를 반복합니다 .

( Python 3.6 에서는 더 이상 그렇지 않지만 아직 동작 이 보장되지는 않습니다.)

>>> d = {'x': 1, 'y': 2, 'z': 3}
>>> list(d)
['y', 'x', 'z']
>>> d.keys()
['y', 'x', 'z']

귀하의 예를 들어 다음을 사용하는 것이 좋습니다 dict.items().

>>> d.items()
[('y', 2), ('x', 1), ('z', 3)]

이것은 튜플 목록을 제공합니다. 다음과 같이 반복하면 각 튜플이 자동으로 압축 해제 k됩니다 v.

for k,v in d.items():
    print(k, 'corresponds to', v)

루프 본문이 몇 줄에 불과한 경우 루프를 반복할 때 kv변수 이름을 사용 하는 것은 매우 일반적입니다. dict더 복잡한 루프의 경우 더 설명적인 이름을 사용하는 것이 좋습니다.

for letter, number in d.items():
    print(letter, 'corresponds to', number)

형식 문자열을 사용하는 습관을 들이는 것이 좋습니다.

for letter, number in d.items():
    print('{0} corresponds to {1}'.format(letter, number))

 

반응형