简答题第2题:字典与列表的综合应用
This commit is contained in:
+34
@@ -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()`。
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user