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

Posted 蚂蚁小兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

以上是关于Python 列表元素是字典的列表去重的主要内容,如果未能解决你的问题,请参考以下文章

python列表里的字典元素去重

Python实现对列表中重复元素进行去重的方法小结

Python对字典列表进行去重追加

python 字典列表/列表套字典 去重重复的字典数据

Python之集合函数

python-list