#연구/#Python

[파이썬/Python] 딕셔너리의 키와 값을 반대로 바꾸는 방법 #Invert / Reverse a Dictionary #딕셔너리 리버스 파이썬 #defaultdict

every7hing 2020. 12. 9. 14:08
반응형

[Python/파이썬] 딕셔너리의 키와 값을 반대로 바꾸는 방법 

#Invert / Reverse a Dictionary 

#딕셔너리 리버스 파이썬

 

Dictionary를 사용할 경우, Key: Value 쌍으로 매핑이 된다.

이때, Key와 Value를 반전시키고 싶을 경우가 있다.

Value: Key 이런식으로 말이다.

 

이럴 경우 어떻게 할 수 있을까?

여러가지 방법이 있겠지만, 여기서는 defaultdict을 이용해 볼 예정이다.

 

설명에 앞서, 먼저 구현해보겠다.

일단, 아래와 같은 dict가 있다고 가정하겠다.

scores = {
  'Anna': 10,
  'Bill': 10,
  'Tom': 9,
  'Teddy' : 4
}

 

위와 같은 scores dict를 반전시키는 함수를 아래와 같이 구현한다.

 

from collections import defaultdict

def invert_dictionary(obj):
  inv_obj = defaultdict(list)
  for key, value in obj.items():
    inv_obj[value].append(key)
  return dict(inv_obj)

 

invert_dictionary 함수의 내용은 간단하다.

주어진 dictionary의 Key와 Value를 inv_obj의 Value와 Key로 바꿔서 저장한다.

 

여기서 그럼 defaultdict(list)는 왜 사용되었을까?

 

 

defaultdict 함수는 주어진 object 형태의 dictionary로 초기화하여 유사한 dict를 설정할 수 있게한다.

말이 어려운것 같지만 간단하다.

위에서 파라미터에 list가 들어갔으니, 초기값이 list형태인 dictionary가 하나 생성된다고 보면된다.

위의 예제코드에서는 기존 dictionary를 invert한 dictionary를 저장하기 위한 공간의 생성이라고 보면 된다.

 

계속해서 보면,

완성된 코드는 다음과 같다.

from collections import defaultdict

def invert_dictionary(obj):
  inv_obj = defaultdict(list)
  for key, value in obj.items():
    inv_obj[value].append(key)
  return dict(inv_obj)

scores = {
  'Anna': 10,
  'Bill': 10,
  'Tom': 9,
  'Teddy' : 4
}

print(invert_dictionary(scores))

 

 

출력된 내용을 살펴보면,

scores의 Key: Value 쌍이 반전되어 있는 것을 볼 수 있다.

재미있는 것은 'Anna'와 'Bill'이 둘다 10이라는 Value를 가지고 있으므로, invert된 dictionary에서는 10이라는 같은 Key값으로 묶여 있는 것을 볼 수 있다.

{10: ['Anna', 'Bill'], 9: ['Tom'], 4: ['Teddy']}

 

반응형