Python如何获取字典列表中最后一个ORDER_CHANGED事件的时间戳?
获取字典列表中最后一个符合条件的事件时间戳
我有一个字典列表,每个字典的格式如下:
{ 'id': 'XYZ_ALL_UNIQUE', 'event_type': 'TYPE OF EVENT', 'created_time': '2023-05-29T11:23:54.456170Z' }
列表中的每个字典对应一个唯一事件,比如ORDER_CREATED、ORDER_DELIVERED等,且每个事件都有唯一时间戳。其中ORDER_FULFILLED事件仅存在一个,我可以通过以下代码获取其时间戳:
for item in list_of_dict: if item['event_type'] == 'ORDER_FULFILLED': fulfilled_time = item['created_time']
但存在多个event_type为ORDER_CHANGED的事件及对应的时间戳,使用现有循环代码会遍历所有该类型事件,我只需要该类型最后一个事件的时间戳,忽略其他同类型事件。尝试过list.count(True)但无法满足需求,想请教Python中如何获取列表中多个符合条件项的最后一个结果?
解决方法
方法一:反向遍历(高效推荐)
从列表末尾开始遍历,找到第一个符合条件的事件就停止,这个事件就是原列表中最后一个符合条件的项:
changed_time = None for item in reversed(list_of_dict): if item['event_type'] == 'ORDER_CHANGED': changed_time = item['created_time'] break
这种方式不需要遍历整个列表,找到目标就终止,在列表较大时效率更高。
方法二:筛选后取最后一项
先筛选出所有符合条件的事件,再通过索引[-1]取最后一个:
changed_events = [item for item in list_of_dict if item['event_type'] == 'ORDER_CHANGED'] changed_time = changed_events[-1]['created_time'] if changed_events else None
注意要处理没有找到该类型事件的情况,避免索引越界错误。
方法三:生成器表达式结合next()
用生成器表达式反向遍历,通过next()直接获取第一个符合条件的结果,内存占用更低(无需生成完整的筛选列表):
changed_time = next( (item['created_time'] for item in reversed(list_of_dict) if item['event_type'] == 'ORDER_CHANGED'), None )
第二个参数None是默认值,当没有找到符合条件的事件时返回它。
内容的提问来源于stack exchange,提问作者saving_space
相关产品推荐
相关产品推荐

