要解决的问题:
在解析测试报告时,会有某个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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)