Files
DailyChallenge_ProgrammingD…/Day_2/参考解答.py
T

87 lines
2.9 KiB
Python

# -*- coding: utf-8 -*-
"""
Day_2 参考解答
=============
主题:字典与字符串。
建议:先自己写,写不出来再看;看完后关掉文件自己默写一遍。
"""
# ============================================================
# 题目一:模拟查询结果的处理(热身)
# ============================================================
users = [
{"name": "zhangsan", "age": 20, "city": "青岛"},
{"name": "lisi", "age": 17, "city": "济南"},
{"name": "wangwu", "age": 22, "city": "北京"},
]
# 1. 筛选年龄 ≥ 18
adults = [u for u in users if u["age"] >= 18]
# 2. 按年龄从大到小排序(key 指定按哪个字段排,reverse=True 表示降序)
adults_sorted = sorted(adults, key=lambda u: u["age"], reverse=True)
# 3. 格式化成字符串列表
formatted = [f"{u['name']}({u['age']}岁)" for u in adults_sorted]
# 4. 进阶:拼成一个字符串
joined = ", ".join(formatted)
if __name__ == '__main__':
print(adults)
print([u["name"] for u in adults_sorted])
print(formatted)
print(joined)
# [{'name': 'zhangsan', 'age': 20, 'city': '青岛'}, {'name': 'wangwu', 'age': 22, 'city': '北京'}]
# ['wangwu', 'zhangsan']
# ['wangwu(22岁)', 'zhangsan(20岁)']
# wangwu(22岁), zhangsan(20岁)
# ============================================================
# 题目二:解析 URL 查询参数
# ============================================================
def parse_query_string(query):
"""把 'username=zhangsan&age=20' 解析成 {'username': 'zhangsan', 'age': '20'}"""
result = {}
if not query: # 边界 1:空输入
return result
for item in query.split('&'): # 先按 & 切成若干段
if '=' in item:
key, value = item.split('=', 1) # maxsplit=1:值里可能也含有 '=',只切第一个
else:
key, value = item, '' # 边界 3:没有 = 的参数,值记为空字符串
result[key] = value # 字典赋值天然处理"重复键覆盖"和"值为空"
return result
# 进阶:URL 编码还原(把 + 和 %20 还原成空格)
def url_decode(value):
return value.replace('+', ' ').replace('%20', ' ')
def parse_query_string_advanced(query):
result = {}
if not query:
return result
for item in query.split('&'):
if '=' in item:
key, value = item.split('=', 1)
else:
key, value = item, ''
result[key] = url_decode(value)
return result
if __name__ == '__main__':
print(parse_query_string('username=zhangsan&age=20&city=qingdao'))
# {'username': 'zhangsan', 'age': '20', 'city': 'qingdao'}
print(parse_query_string('name=a&name=b&flag'))
# {'name': 'b', 'flag': ''}
print(parse_query_string(''))
# {}
print(parse_query_string_advanced('name=Zhang+San&city=A%20B'))
# {'name': 'Zhang San', 'city': 'A B'}