You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何按条件向数组中追加符合要求的嵌套记录?

过滤嵌套列表的实现方案

需求说明

处理包含[id, msg_key, msg_value, date]的嵌套列表,仅保留满足以下条件的记录:

  • 对于当前记录,与它同id、同msg_key的上一条记录,msg_value和当前记录不同;
  • 每个(id, msg_key)组合的第一条记录直接保留。

示例输入

events = [
    [1, "foo", "bar",  709],
    [1, "foo", "bar2", 710],
    [1, "foo", "bar",  711],
    [1, "foo", "bar2", 712],
    [1, "foo", "bar",  713],
    [2, "foo", "toto", 714],
    [1, "foo", "bar",  715],
    [1, "foo", "bar2", 716]
]

期望输出

events_filtered = [
    [1, "foo", "bar",  709],
    [1, "foo", "bar2", 710],
    [1, "foo", "bar",  711],
    [1, "foo", "bar2", 712],
    [1, "foo", "bar",  713],
    [2, "foo", "toto", 714],
    [1, "foo", "bar2", 716]
]

完整实现代码

通过一个字典跟踪每个(id, msg_key)组合的最新msg_value,补全循环的判断逻辑:

out_array = []
# 用字典存储每个(id, msg_key)组合对应的最后一次msg_value
last_values = {}

for event in events:
    event_id, msg_key, msg_value, date = event
    # 生成唯一标识组合的键
    key = (event_id, msg_key)
    # 判断条件:组合未出现过,或当前值与上一次不同
    if key not in last_values or last_values[key] != msg_value:
        out_array.append(event)
        # 更新该组合的最新值
        last_values[key] = msg_value

逻辑说明

  • last_values字典的作用是记录每个(id, msg_key)组合最近一次出现的msg_value,避免每次回溯遍历列表,提升效率;
  • 遍历每条记录时,先解构出四个字段,生成组合键;
  • 满足以下任一条件就保留记录:
    1. 该(id, msg_key)组合是第一次出现;
    2. 当前记录的msg_value和该组合上一次的msg_value不一样;
  • 保留记录后,立即更新字典中对应组合的最新msg_value,确保下一次判断的准确性。

内容的提问来源于stack exchange,提问作者Stéphane GRILLON

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:32:49