딕셔너리(dictionary) 자료형은 key와 value가 짝을 이루어 하나의 요소가 되는 자료형입니다. 딕셔너리 내부에서 key 값은 중복되지 않는 고윳값(unique value)이어야 합니다. 만약, 기존에 있는 key에 다른 value가 들어가면, 마지막에 수정된 key:value가 딕셔너리에 저장됩니다.
이번엔 딕셔너리에서 key와 value를 바꾸는(swap) 방법을 알아보겠습니다.
예시 딕셔너리 생성
먼저, dict 함수와 zip함수를 이용해 예제로 사용할 dictionary를 생성하였습니다. 간단히 코드를 설명하자면, zip함수는 동일한 개수의 요소 값을 갖는 시퀀스 자료형을 묶어주는 역할을 합니다. 위의 예제에선 zip함수의 요소인 'abcde'와 range(5)[0~4까지 정수]를 묶어줍니다. 두 요소 모두 길이가 5이기 때문에 짝지어 묶일 수 있습니다. 요소를 묶은 뒤, dict() 함수의 인자로 넣어주면, 묶인 요소들이 key와 value로 나뉘어 딕셔너리가 생성되게 됩니다.
코드
di = dict(zip('abcde',range(5)))
di
Key Value Swap
딕셔너리 컴프리핸션 이용
위처럼 딕셔너리의 key와 value를 쌍으로 반복할 수 있는 items()를 사용하여 key를 k에, value를 v에 넣고 출력하는 부분에 v:k를 이용하여 key와 value를 바꿀 수 있습니다. 컴프리핸션의 기초는 [Python의 꽃] 리스트 컴프리헨션(List Comprehension) 페이지에서 간단히 설명하였으니 참조 바랍니다.
코드
{v:k for k,v in di.items()}
zip함수 이용
딕셔너리에는 value들만 리스트로 모으는 .values() 메서드와 key들만 리스트로 모으는 .keys() 메서드가 있습니다. zip함수는 동일한 개수로 이루어진 자료형을 묶는 함수이기 때문에, values를 앞에, keys를 뒤에 씀으로써 key와 value의 순서쌍을 뒤집을 수 있습니다. 마지막에 dict로 감싸서 딕셔너리 형태로 바꿔줍니다.
코드
dict(zip(di.values(),di.keys()))
zip함수만 사용하게 되면 위처럼, zip 객체만 나오게 됩니다.
zip객체는 iterator(이터레이터)이기 때문에 반복문에 사용할 수 있습니다. 이터레이터란 반복 가능한 객체를 말합니다. 저는 처음에 잘 와 닿지 않았는데, 그냥 for문에 넣을 수 있는 객체가 이터레이터구나 라고 이해하면 되었습니다.
위처럼 for문의 in 뒤쪽에 넣어서 반복이 되는 것을 이터레이터라고 합니다. value와 key가 순서가 바뀌어 i에 들어가 하나씩 출력(print)되는 것을 볼 수 있습니다.
코드
# 반복하면 묶인 튜플 출력됨.
for i in zip(di.values(),di.keys()):
print(i)
실습 코드 깃헙
github.com/netsus/python_practice/blob/master/python_practice_2_dict_key_value_swap.ipynb
Reference)
Picture 1) https://ourcodeworld.com/articles/read/734/why-is-python-the-future-of-programming
'Programming > Python 기초' 카테고리의 다른 글
[Python] Counter 란? (0) | 2020.11.13 |
---|---|
[Python] map 함수란? 활용법(lambda) (0) | 2020.10.25 |
[Python] Ordered dict 이란 (0) | 2020.09.20 |
[Python] 문자열 자르기 (str to list) [split함수] (3) | 2020.08.25 |
[Python 기초] 자료형 (0) | 2020.08.11 |