python/기타

json, dict type의 key, value 바꾸기 (swap)

Memory! 2023. 3. 26. 21:11
728x90
반응형

데이터를 다루다보면 json type의 데이터(dict type과 동일)를 많이 사용합니다.

그런데 간혹 json 터의 key와 value를 서로 바꿔야 하는 경우가 있습니다.

모든 key가 value가 되어야 하고, 모든 value가 key가 되어야 하는 경우가 있는거죠...

 

key, value를 swap 하는 코드를 작성 해 두고 (함수로 만들어 두어도 좋습니다.) 사용하시면 좋습니다.

 

예시) json 타입의 경우 json을 dict 타입으로 변경 후 사용하시면 좋습니다.(아래 참고)

 

python dict json 변환, json 읽기 쓰기

json 타입을 사용하기 위해서는 먼저 json package를 install 해야 합니다. "import json" 을 입력해서 package를 찾을 수 없다고 에러가 뜬다면 설치해주세요 명령어 : conda install json or pip install json 1. dict to js

itgilajavy.tistory.com

1. simple case (value가 모두 다른 경우)

dict_a = {}
dict_a['Korea'] = 'Seoul'
dict_a['Japan'] = 'Tokyo'
dict_a['China'] = 'Beijing'
dict_a['U.S.A'] = 'Washington, D.C'
dict_a['Austrailia'] = 'Canberra'

### 출력 ###
{'Korea': 'Seoul',
 'Japan': 'Tokyo',
 'China': 'Beijing',
 'U.S.A': 'Washington, D.C',
 'Austrailia': 'Canberra'}
for k, v in dict_a.items() :
    dict_b[v] = k

너무 쉬운 코드죠...

만약.. 위와 같이 value가 모두 다른 값이 아닌 value에 같은 값이 있다면..?

 

2. value에 중복 값이 있는 경우

dict1 = {"a": 1, "b": 2, "c": 3, "d": 2}

### 출력 ###
{'a': 1, 'b': 2, 'c': 3, 'd': 2}

b와 d의 값이 2로 같습니다.

그럼.. key, value를 변경하려면 value 같은값이 있기 때문에 전제 dict의 value 부분이 list로 변경되어야 하고, key 2 의 value는 ['b', 'd']가 되어야 합니다.

코드는 아래와 같이 할 수 있습니다.

from collections import defaultdict

dict2 = defaultdict(list) # dict2의 value를 defualt로 list가 되도록 한다.

### dict2 출력 ###
defaultdict(list, {})

for k, v in dict1.items() :
    dict2[v].append(k)
    
### dict2 출력 ###   
defaultdict(list, {1: ['a'], 2: ['b', 'd'], 3: ['c']})

먼저 collections 패키지를 import 하여 defaultdict를 사용 할 수 있도록 합니다.

defaultdict 생성자를 이용하여 list 가 value의 기본 타입인 dict 변수를 생성하고

for문의 append를 이용해서 value에 값을 추가호도록 구현합니다.

 

dict2를 찍어보면 defaultdict라는 타입으로 되어있음을 볼 수 있는데, 기존의 dict와 같이 동일하게 사용하면 됩니다.

728x90
반응형