我有两个测试结果列表.测试结果表示为词典:
list1 = [{testclass='classname',testname='testname',testtime='...},...]
list2 = [{testclass='classname',...},...]
两个列表中的字典表示略有不同,因为对于一个列表,我有一些
更多信息.但在所有情况下,任一列表中的每个测试字典都将具有classname和testname元素,这些元素有效地形成了唯一标识测试的方式以及跨列表进行比较的方法.
我需要找出list1中但不在list2中的所有测试,因为这些测试代表了新的测试失败.
要做到这一点,我做:
def get_new_failures(list1,list2):
new_failures = []
for test1 in list1:
for test2 in list2:
if test1['classname'] == test2['classname'] and \
test1['testname'] == test2['testname']:
break; # Not new breakout of inner loop
# Doesn't match anything must be new
new_failures.append(test1);
return new_failures;
我想知道这是一个更加Python的方式.我看过滤器.过滤器使用的函数需要获取两个列表的句柄.一个很容易,但我不确定如何处理这两个问题.我知道列表的内容直到运行时.
任何帮助,将不胜感激,
谢谢.
最佳答案
试试这个:
def get_new_failures(list1,list2):
check = set([(d['classname'],d['testname']) for d in list2])
return [d for d in list1 if (d['classname'],d['testname']) not in check]