URL のパラメーター文字列は parse_qsl でタプルのリストにできます。これを辞書型にキャストすれば辞書データが得られます。
from urllib.parse import parse_qsl text = "name=佐藤&age=30&skill=Python&skill=SQL&active=true" parsed = parse_qsl(text) print(type(parsed)) # <class 'list'> print(parsed) # [('name', '佐藤'), ('age', '30'), ('skill', 'Python'), ('skill', 'SQL'), ('active', 'true')] data = dict(parsed) print(data) # {'name': '佐藤', 'age': '30', 'skill': 'SQL', 'active': 'true'}
最後の dict でタプルの ('skill', 'Python') が消えていますね。これが parse_qsl の問題です。
同じキーをもつ値をすべて漏れなく取得するには parse_qs を使います。先の関数 parse_qsl と似ていて、まぎらわしいです。
from urllib.parse import parse_qs text = "name=佐藤&age=30&skill=Python&skill=SQL&active=true" parsed = parse_qs(text) print(type(parsed)) # <class 'dict'> print(parsed) # {'name': ['佐藤'], 'age': ['30'], 'skill': ['Python', 'SQL'], 'active': ['true']}
なんとこの関数、一発で辞書を返します。ただ、キーに対応する値はリストです。