Перебор ключ-значение в 2-х и более словарях и запись совпадения в новый словарь через *args
📁 словарь, python, помощь, ошибка
Имеется два словаря, нужно перебрать ключ-значение в обоих словарях. Сравнить если одинаковые ключ-значения с помощью цикла 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)
У меня вот так получилось:
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 Войдите чтобы оставить ответ