Сравнить значения словаря, принадлежащие разным ключам - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть словари в списке вроде этого:

sample_dict = [{1: [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], \
                    [1, 2, 3, 4, 5], \
                    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]}, \
               {2: [[3, 4, 6, 7, 8, 9, 10, 11], [1, 2, 3, 6, 10], []]}]

Теперь я хотел бы проверить первое значение ключа 1 в списке с первым значением ключа 2. как то так,

Сравнить значения (первое значение списка списков ключа 1)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

с (первое значение списка списков ключа 2)

[3, 4, 6, 7, 8, 9, 10, 11]

Если они совпадают, я хотел бы добавить его в новый список matching_list, если нет, я бы добавил несоответствующие значения в другой список non_matching_list.

Это то, что я пробовал до сих пор,

matching_list = []
non_matching_list = []

for each_dict in sample_dict:
    current_dict_values = []
    for key, value_list in each_dict.items():
        temp_dict_values = []

        for value in value_list:
            temp_dict_values.append(value)

            .... don't know how to keep track of key 1's first list of lists values.

Я думал о создании временного списка для отслеживания ключевых 1 значений списка, но я застрял и не уверен, что делать дальше.

Мой окончательный вывод должен быть таким:

matching_list = [[3,4,6,7,8,9,10], [1,2,3], []]
non_matching_list = [[1,2,5,11],[4,5,6,10],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]

Как мне достичь результата? Любые идеи будут великолепны.

1 Ответ

0 голосов
/ 12 ноября 2018

Это может быть достигнуто путем преобразования lists в sets для выполнения таких операций, как symmetric_difference() и intersection() для ваших non_matching_list и matching_list соответственно.

Вот одно из решений:

matching_list, non_matching_list = [], []

for lists1, lists2 in zip(sample_dict[0].values(), sample_dict[1].values()):
    for l1, l2 in zip(lists1, lists2):
        matching_list.append(list(set(l1) & set(l2)))
        non_matching_list.append(list(set(l1).symmetric_difference(set(l2))))

Обратите внимание, что использование set(l1) & set(l2) такое же, как set(l1).intersection(set(l2)), так что в основном это операция пересечения.

Я также использую встроенную функцию zip() для агрегации элементов из каждого итератора (обоих списков).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...