딕셔너리를 사용하다보면 key와 value를 서로 바꾼 형태의 새로운 딕셔너리를 만들 일이 생긴다.
key와 value를 도치시키는 코드를 직접 짜보면
a={'a':1,'b':2,'c':3,'d':1}; #도치 대상
b={}; #도치 후 저장할 딕셔너리
for key, value in a.items():
if value in b:
b[value].append(key); #이미 (value)를 키로 하는 값 (key)가 존재 ->괄호안의 값은 변수
else:
b[value]=[key]; #해당 value,key값이 존재하지 않으면
print(b);
>>{1: ['a', 'd'], 2: ['b'], 3: ['c']}
위와 같이 할 수 있겠지만 더 간단한 방법으로는 컬렉션 내포(Comprehension)를 사용하는 것이다.
컬렉션 내포란 지정된 표현식을 사용해 좀 더 간단히(?) 컬렉션을 생성하는 방법이다.
리스트, 딕셔너리, 셋 모두 가능하지만 이 글에서는 딕셔너리에 대한 예시를 보겠다.
a={'a':1,'b':2,'c':3,'d':1}; #도치 대상
b={value:key for key,value in a.items()} #딕셔너리 컬렉션 내포 표현식
print(b);
>>{1: 'd', 2: 'b', 3: 'c'}
위와 같이 좀 더 간단하게 표현이 가능하다.
하지만 뭔가 이상한 것을 볼 수 있다. 우리 생각대로라면 위처럼 1:['a','d']가 나와야겠지만 컬렉션 내포 방식으로는 하나의 key당 하나의 value만 저장이 가능하다.
따라서 동일한 value가 없는 것을 한눈에 알아볼 수 있는 딕셔너리라면 컬렉션 내포 방식을 사용하는 것이 편하겠지만 대부분의 딕셔너리는 맨 위의 예시와 같이 도치시키는 것이 좋다.
'Python' 카테고리의 다른 글
Python - 클래스(Class)와 객체(Object) (0) | 2020.08.09 |
---|---|
Python - 컬렉션 정리 (0) | 2020.08.04 |
Python - with 문 (0) | 2020.08.01 |
Python - is와 ==의 차이 (and,or,&,|) (1) | 2020.07.29 |
Python - 에일리어스(alias) (0) | 2020.07.29 |