TGViewer
About Python [ru] About Python [ru] @python_tesst · 6.43K subscribers
Post #2084 717
👩‍💻 Безопасный парсинг query string с типами

Напишите функцию 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}
  • 👍 1
More from @python_tesst
  1. Oct 5, 2026Джеффри Хинтон, Йошуа Бенджио и ещё два десятка исследователей выпустили статью про интелл…
  2. Oct 5, 2026Post #3220
  3. Oct 4, 2026Cache Control в Claude Code Советую поставить Cache Control в Claude Code. Причём настойчи…
  4. Oct 2, 2026😅 Айтишник отправил в одну компанию три одинаковых резюме и только одно дошло до финала О…
  5. Oct 2, 2026🤣 Правильно расставленные приоритеты в моей жизни би лайк: 💥 xCode Journal
  6. Oct 1, 2026🤯 Люди взбунтовались против «пыточной для ИИ» На GitHub заметили открытый проект AI Tortu…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →