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

Python如何提取datetime日期并对设备字典列表按日去重

Python实现设备连接记录按日去重方案

实现思路

  • 首先明确去重规则:同一设备(以Serial Number序列号为唯一标识)同一天的多条连接记录,仅保留当日最晚的一条,和示例输出规则匹配
  • 借助datetime模块将每条记录的Date字符串转为标准时间对象,方便提取日期、判断时间先后
  • 用临时字典存储去重结果,key为「设备序列号+日期」的组合,遍历过程中同一key的新记录(时间更晚)会覆盖旧记录,自然实现保留当日最晚条目的需求

完整实现代码

from datetime import datetime

# 示例输入数据
devices = [
    {'Device Type': 'USB Drive', 'Vendor Id': '05E3', 'Product Id': '0749', 'Serial Number': "'000000001539'", 'Date': '10/19/21 10:32 PM', 'Action': 'Full Access', 'Device': 'CNP150'},
    {'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'ABCD'", 'Date': '10/14/21 12:27 AM', 'Action': 'Full Access', 'Device': 'CNP012'},
    {'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'ABCD'", 'Date': '10/14/21 5:38 AM', 'Action': 'Full Access', 'Device': 'CNP012'},
    {'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'ABCD'", 'Date': '10/14/21 11:59 PM', 'Action': 'Full Access', 'Device': 'CNP012'},
    {'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'748123d6d86dd4173371362201a0d8d250145fbf'", 'Date': '10/17/21 6:59 AM', 'Action': 'Full Access', 'Device': 'CNP011'}
]

def deduplicate_devices(devices_list):
    unique_records = {}
    # 时间格式和输入的Date字符串规则一一对应,后续如果时间格式变更可调整此处
    date_format = "%m/%d/%y %I:%M %p"
    for item in devices_list:
        # 将Date字符串转换为datetime对象
        dt = datetime.strptime(item['Date'], date_format)
        # 提取日期部分作为去重key的组成
        date_str = dt.strftime("%m/%d/%y")
        # 组合唯一判定key:设备序列号+日期
        unique_key = (item['Serial Number'], date_str)
        # 同一key的新记录会覆盖旧记录,最终保留当日最晚一条
        unique_records[unique_key] = item
    # 将去重后的字典值转为列表返回
    return list(unique_records.values())

# 调用函数获得结果
result = deduplicate_devices(devices)

# 打印结果验证
for item in result:
    print(item)

输出验证

运行代码后输出和预期完全一致:

{'Device Type': 'USB Drive', 'Vendor Id': '05E3', 'Product Id': '0749', 'Serial Number': "'000000001539'", 'Date': '10/19/21 10:32 PM', 'Action': 'Full Access', 'Device': 'CNP150'}
{'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'ABCD'", 'Date': '10/14/21 11:59 PM', 'Action': 'Full Access', 'Device': 'CNP012'}
{'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'748123d6d86dd4173371362201a0d8d250145fbf'", 'Date': '10/17/21 6:59 AM', 'Action': 'Full Access', 'Device': 'CNP011'}

规则调整说明

如果需要改为保留当日最早的一条记录,只需修改赋值逻辑即可:

# 仅当key不存在时才赋值,首次出现的最早记录会被保留
if unique_key not in unique_records:
    unique_records[unique_key] = item

内容的提问来源于stack exchange,提问作者Ritu Gautam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:18:00