栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 列表元素是字典的列表去重

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 列表元素是字典的列表去重

要解决的问题:
在解析测试报告时,会有某个CASE被执行了两次,但是执行的时间不同,目的时保留时间最近的那条数据,删掉其它的值

下面的列表是要处理的列表,CaseName 有重复项,需要删除:

a = [
{'CaseName': 'TC_DTC-9756237', 
'test_begin_time': '2021-12-24 10:20:45'},
{'CaseName': 'TC_DTC-9756239',
 'test_begin_time': '2021-12-22 10:20:46'},
 {'CaseName': 'TC_DTC-9756237', 
 'test_begin_time': '2021-12-24 10:20:46'},
 {'CaseName': 'TC_DTC-9756239', 
 'test_begin_time': '2021-12-24 10:21:46'}
 ]

因为列表在python 中是可变类型,我们每次执行一次删除,都改变了其结构,所以,这里我的思路是每次删除一组重复的元素,这时列表结构已经变了,然后递归再次处理列表,直到没有重复元素为止

from collections import Counter

a = [{'CaseName': 'TC_DTC-9756237', 'test_begin_time': '2021-12-24 10:20:45'},{'CaseName': 'TC_DTC-9756239', 'test_begin_time': '2021-12-22 10:20:46'},{'CaseName': 'TC_DTC-9756237', 'test_begin_time': '2021-12-24 10:20:46'},{'CaseName': 'TC_DTC-9756239', 'test_begin_time': '2021-12-24 10:21:46'}]

def RemoveRepeatItemFromList(Items):
    c_name = [ item['CaseName'] for item in Items]
    b_time = [ item['test_begin_time'] for item in Items]
    #print(c_name)

    b = dict(Counter(c_name))
    repeat_items = [key for key, value in b.items() if value > 1]  # 只展示重复元素
    #print(repeat_items)
    '''每次只处理第一个重复的元素'''
    if repeat_items:
        '''找出重复case name 在 Items 列表中的索引'''
        r_index_list = [index for index, value in enumerate(c_name) if value == repeat_items[0]]
        #print(r_index_list)
        '''根据重复case name 的索引值 找出Items 的 test_begin_time ,然后max找到最大值'''
        max_value = max([Items[item]["test_begin_time"] for item in r_index_list])
        #print(max_value)
        '''根据最大的时间戳值,找到这个最大值在Items的索引'''
        max_index = b_time.index(max_value)
        '''根据最大的时间戳值,找到这个最大值在Items的索引'''
        r_index_list.remove(max_index)
        '''删除Items中除了最大值的外的其它值'''
        for item in r_index_list:
            Items.pop(item)
        #print(a)
        # 递归
        RemoveRepeatItemFromList(Items)

print(a)
RemoveRepeatItemFromList(a)
print(a)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/829050.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号