аватар question@mail.ru · 01.01.1970 03:00

Перебор ключ-значение в 2-х и более словарях и запись совпадения в новый словарь через *args

Имеется два словаря, нужно перебрать ключ-значение в обоих словарях. Сравнить если одинаковые ключ-значения с помощью цикла for и параметра *args. Добавить в новый словарь одинаковые найденные ключ-значения.

operator_one = { 2: 'break',         1: 'pass',         3: 'print',         4: 'yield',         5 :'try' ,         }operator_two = { 1: 'pass',         2:'global',         3: 'yield',         4: 'print',         5: 'try',         }def operator_important(farg, *args):    """"""Перебор ключ-значения в двух словарях при помощи args и записи в новый словарь.""""""    operator_main = dict()             # создание словаря и запись в перем    print(""vocabulary_one:"", farg)     # вывод первого аргумента    for key, value in args:            # перебор ключ-значение в обоих словарях        print(""vocabulary_two:"", arg)  # вывод второго аргумента        if key in args and value == args[key]: # если ключ-значение равно аргументу ключ-значение, то создаем новый словарь с ключом и значение            operator_main[key] = value # добавляем в нов. словарь найденное  ключ-значение, которое совпало

Ошибка:

ValueError: too many values to unpack (expected 2)

аватар answer@mail.ru · 01.01.1970 03:00

У меня вот так получилось:

operator_one = {2: 'break',                1: 'pass',                3: 'print',                4: 'yield',                5: 'try',                }operator_two = {1: 'pass',                2: 'global',                3: 'yield',                4: 'print',                5: 'try',                }operator_three = {1: 'pass',                  2: 'global',                  3: 'yield',                  4: 'print',                  5: 'try',                  }def operator_important(*args: dict):    operator_main = dict()  # Создаем пустой словарь    for key, value in args[0].items():  # Для ключа и значения из первого словаря...        check = True  # Устанавливаем флаг проверки в значение ""Истина""        for i in range(1, len(args)):  # Проверяем все словари на совпадение            if key not in args[i] or value != args[i][key]:  # Если ключ отсутствует в другом словаре                                                                         # или его значение отлично от проверяемого                check = False  # Устанавливаем флаг в значение ""Ложь""                break  # И прерываем проверку ключа        if check:   # Если флаг сохранил значение ""Истина"" (То есть ключ присутствует во всех проверяемых словарях                    # и значения ключа во всех словарях равны            operator_main[key] = value  # Добавляем ключ и значение в новый словарь    retu operator_mainprint(operator_important(operator_one, operator_two, operator_three))

Немного упростил функцию:

def operator_important(*args: dict):    operator_main = dict()  # Создаем пустой словарь    for key, value in args[0].items():  # Для ключа и значения из первого словаря...        for i in range(1, len(args)):  # Проверяем все словари на совпадение            if key not in args[i] or value != args[i][key]:     # Если ключ отсутствует в другом словаре                                                                # или его значение отлично от проверяемого                break  # Прерываем проверку ключа        else:   # Если цикл не прерывался (То есть ключ присутствует во всех проверяемых словарях                # и значения ключа во всех словарях равны            operator_main[key] = value  # Добавляем ключ и значение в новый словарь    retu operator_main

Последние

Похожие