如何更简洁地聚合按timestamp排序文档中各source的最新条目?
按来源聚合最新文档的简洁实现方式
给定一组按时间戳从新到旧排序的文档列表,需要聚合每个source对应的最新文档,有没有更简洁的实现方式?
输入示例
docs = [ { "timestamp": "2022-10-11T16:00:00.000000", "source": "foo" }, { "timestamp": "2022-10-10T16:00:00.000000", "source": "bar" }, { "timestamp": "2022-10-09T16:00:00.000000", "source": "foo" } ]
期望输出
result = [ { "timestamp": "2022-10-11T16:00:00.000000", "source": "foo" }, { "timestamp": "2022-10-10T16:00:00.000000", "source": "bar" } ]
现有迭代实现
result = {} for doc in docs: if doc["source"] not in result: result[doc["source"]] = doc return list(result.values())
更简洁的实现方式
因为输入已经按时间戳降序排列,每个source的第一个出现项就是最新的,直接用字典推导式一行即可完成:
result = list({doc["source"]: doc for doc in docs}.values())
原理说明
字典的键具有唯一性,遍历文档时,后续同source的文档不会覆盖已存入字典的首个(最新)项,最后将字典的值转为列表就能得到目标结果。
内容的提问来源于stack exchange,提问作者maratac
相关产品推荐
相关产品推荐

