87 lines
2.9 KiB
Python
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'}
|