언어 Language/파이썬 Python

Q. 파이썬에서 urlencoded된 'key1=value1&key2=value2' 형태를 딕셔너리로 바꾸는 법은?

Tap to restart 2021. 2. 19. 16:00

A. parse_qsl을 이용한다.

직접 구현할 수도 있지만 사람들이 많이 쓰는 라이브러리가 있다면 그냥 쓰는  게 좋다. 많이 쓰는 라이버리르는 예외처리가 잘 되어 있으니까.

 

POST 방식으로 request.body 값을 가져오면 urlencoded된 'key1=value1&key2=value2' 형태다. 키로 값을 가져올 수 있게 딕셔너리로 바꾸면 사용하기 편해진다.

 

parse_qsl을 활용하는 법

from urllib.parse import parse_qsl
data = "name=ted&age=40"
data_dict = dict(parse_qsl(data))
data_dict

결과

{'name': 'ted', 'age': '40'}

 

parse_qs 활용하는 법

from urllib.parse import parse_qs
data = "name=ted&age=40"
data_dict = parse_qs(data) 
data_dict

결과

{'name': ['ted'], 'age': ['40']}

값이 1개더라도 [ ] 리스트 형태로 나와서 별로다.

 

직접 구현

data = "name=ted&age=40"
data_list = data.split("&") if '&' in data else None
data_dict = dict([(item.split("=")[0], item.split("=")[1]) for item in data_list]) if data_list is not None else {}
data_dict

결과

{'name': 'ted', 'age': '40'}

직접 구현할 경우에는 예외처리를 신경써야 한다. 입력값이 "" 없는 경우 등 다양한 경우를 고려해야 한다.