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

Python 列表元素是字典的列表去重,第1张

要解决的问题:
在解析测试报告时,会有某个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)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/736419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存