# -*- 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'}