Сравнение списков словарей

У меня есть два списка результатов тестирования. Результаты тестов представлены в виде словарей:

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;

Мне интересно, есть ли более питоновский способ сделать это. Я рассмотрел фильтры. Функция, которую использует фильтр, должна получить доступ к обоим спискам. Один - это просто, но я не уверен, как она получит доступ к обоим спискам. Я знаю содержимое списков до момента выполнения.

Любая помощь будет оценена по достоинству,

Спасибо.

5
задан Óscar López 5 May 2012 в 04:44
поделиться