Python

Python - 딕셔너리 키(key), 값(value) 도치

5Re 2020. 8. 4. 00:19

딕셔너리를 사용하다보면 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가 없는 것을 한눈에 알아볼 수 있는 딕셔너리라면 컬렉션 내포 방식을 사용하는 것이 편하겠지만 대부분의 딕셔너리는 맨 위의 예시와 같이 도치시키는 것이 좋다.