У меня есть два списка результатов тестирования. Результаты тестов представлены в виде словарей:
list1 = [{testclass='classname', testname='testname', testtime='...},...]
list2 = [{testclass='classname', testname='testname', ...},...]
Представление словаря немного отличается в обоих списках, потому что для одного списка у меня есть немного больше информации. Но в любом случае, каждый словарь теста в любом списке будет иметь элемент classname и testname, которые вместе эффективно формируют способ уникальной идентификации теста и способ его сравнения в разных списках.
Мне нужно выяснить все тесты, которые есть в списке1, но нет в списке2, поскольку они представляют собой новые сбои в тестировании.
Для этого я делаю следующее:
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;
Мне интересно, есть ли более питоновский способ сделать это. Я рассмотрел фильтры. Функция, которую использует фильтр, должна получить доступ к обоим спискам. Один - это просто, но я не уверен, как она получит доступ к обоим спискам. Я знаю содержимое списков до момента выполнения.
Любая помощь будет оценена по достоинству,
Спасибо.