본문 바로가기
Coding/Python

Python Anti Pattern - Not using items() to iterate over a dictionary

by Hide­ 2019. 1. 28.
반응형

Not using items() to iterate over a dictionary

key-value쌍으로 이루어진 딕셔너리를 iterate하는 최적의 방법은 for문에 2개의 변수를 선언하고

dictionary.items()를 호출하는 것이다.

각각의 for 반복문에서 파이썬은 자동으로 첫번째 변수에 key를, 두번째 변수에 value를 대입한다.


Anti-pattern

d = {"first_name": "Alfred", "last_name":"Hitchcock"}

for key in d:
    print("{} = {}".format(key, d[key]))

위 예제는 d라는 딕셔너리를 for루프를 통해 순회하는 코드이다.

for루프 내부에서 key를 통해 각 딕셔너리의 값들에 접근한다.

딕셔너리를 순회하는 일반적인 코드이지만 권장하는 방법은 아니다.


Best-practice

d = {"first_name": "Alfred", "last_name":"Hitchcock"}

for key,val in d.items():
    print("{} = {}".format(key, val))

수정된 코드는 Pythonic한 순회 코드이다.

두개의 변수를 통해 itmes()를 호출하면 파이썬은 자동으로 첫번째 변수에 키를, 두번째 변수에 해당 키에 맞는 값을 할당한다.


Difference Python 2 and Python 3

파이썬 2.x에서 items는 복사된 key-value딕셔너리를 튜플 형태로 반환한다.

따라서 복사된 모든 딕셔너리를 메모리에 올리지 않기위해 iteritems를 사용하는것이 권장된다.

하지만 파이썬 3.x에서는 iteritems가 제거됐고 items를 사용해야한다.