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

Python 3中如何处理列表内重复day键的字典数据?

字典列表按day字段去重并保留最后出现项

需求说明

给定存储调度数据的字典列表,当列表中存在day字段重复的字典时,保留最后出现的那一项,删除之前的重复项。比如示例中的Saturday出现两次,最终保留第二个(full_day: False、close_day: True)的条目。

示例数据

data = [
    {'day': 'Monday', 'full_day': True, 'close_day': False, 'start_time': None, 'close_time': None},
    {'day': 'Tuesday', 'full_day': True, 'close_day': False, 'start_time': None, 'close_time': None},
    {'day': 'Wednesday', 'full_day': True, 'close_day': False, 'start_time': None, 'close_time': None},
    {'day': 'Thursday', 'full_day': True, 'close_day': False, 'start_time': None, 'close_time': None},
    {'day': 'Friday', 'full_day': True, 'close_day': False, 'start_time': None, 'close_time': None},
    {'day': 'Saturday', 'full_day': True, 'close_day': False, 'start_time': None, 'close_time': None},
    {'day': 'Saturday', 'full_day': False, 'close_day': True, 'start_time': None, 'close_time': None},
    {'day': 'Sunday', 'full_day': True, 'close_day': False, 'start_time': None, 'close_time': None}
]

解决方案

方法1:利用Python 3.7+字典的有序性

Python 3.7及以上版本的标准字典会保留键的插入顺序,我们可以遍历列表,用day作为字典的键,对应的完整字典作为值——后续出现的同day条目会自动覆盖之前的,最后将字典的值转为列表即可得到结果:

# 遍历列表,用day作为键存储,后续重复项自动覆盖前序
unique_data = {item['day']: item for item in data}
# 转换回列表,保持最后出现项的顺序
result = list(unique_data.values())

方法2:兼容Python 3.6及以下版本

如果使用Python 3.6或更早版本,标准字典不保证有序,可以使用collections.OrderedDict实现同样逻辑:

from collections import OrderedDict

unique_data = OrderedDict()
for item in data:
    # 每次遇到同day的条目,覆盖之前的存储
    unique_data[item['day']] = item
result = list(unique_data.values())

验证结果

执行后,result中的Saturday条目会是列表中最后出现的那一项:

{'day': 'Saturday', 'full_day': False, 'close_day': True, 'start_time': None, 'close_time': None}

这种方法的时间复杂度为O(n),处理效率高,适合大多数场景。

内容的提问来源于stack exchange,提问作者Ahmed Yasin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:05:28