如何在保留顺序的前提下移除Python字典列表的重复值,保留最新条目
直接用字典做去重就可以,只需要一次反向遍历,代码精简很多:
latest_map = {} for item in reversed(data): client_id = item["client"]["id"] # 反向遍历时第一次碰到的id对应最新数据,存进字典后后续重复的直接跳过 if client_id not in latest_map: latest_map[client_id] = item # 提取结果,输出顺序和你原实现的输出一致(最新数据在前) summarised_messages = list(latest_map.values()) for msg in summarised_messages: print(msg)
对比原实现的优势
- 只需要1次遍历,不需要两次循环处理原列表
- 用字典做id的存在性校验,查询和插入都是O(1)复杂度,比原实现用列表做
in查询、remove操作的O(n)复杂度效率更高,就算后续数据量变大也没问题 - 不需要维护两个冗余的辅助列表,代码逻辑更直观,不容易出bug
如果需要调整最终输出顺序,比如按client id升序、或者按时间升序排列,加一行排序逻辑就行:
# 按client id升序排列 summarised_messages.sort(key=lambda x: x["client"]["id"]) # 或者按时间升序排列 # summarised_messages.sort(key=lambda x: x["date"])
内容的提问来源于stack exchange,提问作者Johnny John Boy
相关产品推荐
相关产品推荐

