简答题第2题:字典与列表的综合应用

This commit is contained in:
王堃营
2026-10-07 23:38:11 +08:00
parent 1716472762
commit b7c46750d4
+34
View File
@@ -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()`。