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 列表元素是字典的列表去重的主要内容,如果未能解决你的问题,请参考以下文章