Напишите функцию
parse_query(query_string), которая принимает строку запроса из URL (например, "age=25&name=John&active=true") и возвращает словарь, где значения автоматически приводятся к корректным Python-типам:—
"true" / "false" → bool— числа →
int или float— остальное →
strПоведение:
• Ключи и значения из строки должны быть декодированы (%20 → пробел и т.п.).
• Повторяющиеся ключи игнорируются — берётся первое вхождение.
• Пустые значения (key=) считаются None.
Решение задачи🔽
from urllib.parse import parse_qsl, unquote_plus
def convert_value(val):
if val == "":
return None
if val.lower() == "true":
return True
if val.lower() == "false":
return False
try:
if "." in val:
return float(val)
return int(val)
except ValueError:
return val
def parse_query(query_string):
result = {}
pairs = parse_qsl(query_string, keep_blank_values=True)
for key, value in pairs:
if key not in result: # Берем только первое вхождение
decoded_key = unquote_plus(key)
decoded_value = unquote_plus(value)
result[decoded_key] = convert_value(decoded_value)
return result
# Пример использования
query = "age=25&name=John%20Doe&height=1.82&active=true&admin=false&bio=&age=999"
print(parse_query(query))
# Ожидаемый результат:
# {'age': 25, 'name': 'John Doe', 'height': 1.82, 'active': True, 'admin': False, 'bio': None}