From b7c46750d4ccb865fb572dfc3ada5adcf1cf527e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A0=83=E8=90=A5?= <1572506709@qq.com> Date: Wed, 7 Oct 2026 23:38:11 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=80=E7=AD=94=E9=A2=98=E7=AC=AC2=E9=A2=98?= =?UTF-8?q?=EF=BC=9A=E5=AD=97=E5=85=B8=E4=B8=8E=E5=88=97=E8=A1=A8=E7=9A=84?= =?UTF-8?q?=E7=BB=BC=E5=90=88=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- written.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/written.md b/written.md index 272be2f..675d413 100644 --- a/written.md +++ b/written.md @@ -45,4 +45,38 @@ c = copy.deepcopy(a) 原因:浅拷贝只复制最外层容器,内部元素仍是引用(指向同一对象);深拷贝会递归复制每一层,得到完全独立的对象。 +第 2 题:字典与列表的综合应用 + +```python +logs = [ + {"user": "张三", "action": "login", "level": "INFO"}, + {"user": "李四", "action": "logout", "level": "INFO"}, + {"user": "张三", "action": "error", "level": "ERROR"}, + {"user": "王五", "action": "login", "level": "INFO"}, + {"user": "李四", "action": "error", "level": "ERROR"}, +] +``` + +① 找出所有 level 为 "ERROR" 的日志: + +```python +error_logs = [log for log in logs if log["level"] == "ERROR"] +# [{'user': '张三', 'action': 'error', 'level': 'ERROR'}, +# {'user': '李四', 'action': 'error', 'level': 'ERROR'}] +``` + +② 统计每个用户出现几次: + +```python +user_count = {} +for log in logs: + user = log["user"] + user_count[user] = user_count.get(user, 0) + 1 +# {'张三': 2, '李四': 2, '王五': 1} +``` + +也可以用 `collections.Counter` 一行完成:`Counter(log["user"] for log in logs)`。 + +③ 为什么不能用 len(logs):`len(logs)` 只返回日志的总条数(这里是 5),它不做任何分类统计。要按用户分别计数,必须用一个 for 循环逐条遍历 logs,取出每条里的 `"user"` 字段,再用字典以用户名为键累加次数。所以需要的是「for 遍历 + 字典累加」这种结构,而不是一个 `len()`。 +