Pythonic способ проверить, есть ли у двух словарей одинаковый набор ключей?

Например, допустим, что у меня есть словари:

d_1 = {'peter': 1, 'adam': 2, 'david': 3} 

а также

 d_2 = {'peter': 14, 'adam': 44, 'david': 33, 'alan': 21} 

Какой самый умный способ проверить, содержат ли два словаря один и тот же набор ключей? В приведенном выше примере он должен возвращать False потому что d_2 содержит ключ 'alan' , который d_1 не делает. Обратите внимание: я не заинтересован в проверке того, что связанные значения для каждого ключа одинаковы, только то, что набор ключей один и тот же.

6 Solutions collect form web for “Pythonic способ проверить, есть ли у двух словарей одинаковый набор ключей?”

Вы можете получить ключи для словаря с помощью dict.keys ().

Вы можете превратить это в набор с помощью set (dict.keys ())

Вы можете сравнивать наборы с ==

Подводить итоги:

 set(d_1.keys()) == set(d_2.keys()) 

даст вам то, что вы хотите.

В Python2,

 set(d_1) == set(d_2) 

В Python3 вы можете сделать это, что может быть немного более эффективным, чем создание наборов

 d1.keys() == d2.keys() 

хотя Python2 будет работать тоже

 >>> not set(d_1).symmetric_difference(d_2) False >>> not set(d_1).symmetric_difference(dict.fromkeys(d_1)) True 

Один из способов – проверить симметричную разницу (новый набор с элементами в s или t, но не для обоих):

 set(d_1.keys()).symmetric_difference(set(d_2.keys())) 

Но более короткий способ просто сравнить наборы:

 set(d_1) == set(d_2) 
  • В Python 3, dict.keys() возвращает объект просмотра, который может использоваться как набор. Это намного эффективнее, чем создание отдельного набора.

     d_1.keys() == d_2.keys() 
  • В Python 2.7, dict.viewkeys() делает то же самое.

     d_1.viewkeys() == d_2.viewkeys() 
  • В Python 2.6 и ниже вам нужно построить набор ключей каждого dict.

     set(d_1) == set(d_2) 

    Или вы можете перебирать ключи самостоятельно для большей эффективности памяти.

     len(d_1) == len(d_2) and all(k in d_2 for k in d_1) 

Быстрый вариант (не уверен, что его наиболее оптимальный)

 len(set(d_1.keys()).difference(d_2.keys())) == 0 
  • Parsing Suds SOAP-тип данных в Python dict
  • Разница между dict.clear () и назначением {} в Python
  • Морзе код на английский python3
  • Сортировка словаря словарей по нескольким значениям дочернего словаря
  • обратное отображение словаря с помощью Python
  • Каков самый быстрый кортеж производительности для больших наборов данных в python?
  • Сравнение скорости доступа к словарю с целым ключом от строкового ключа
  • python: читать словарь json и loop
  • Как быстро получить доступ ко всем значениям, соответствующим определенному ключу второго уровня, независимо от ключа первого уровня в словаре Python?
  • Как преобразовать список словарей в словарь списков в Python?
  • Подсчет частоты каждой буквы в строке
  •  
    Interesting Posts for Van-Lav

    Использование дополнительных аргументов командной строки с помощью пушки

    Почему использование None исправляет изменчивый параметр Python по умолчанию?

    Не удается установить модуль PyPdf 2

    Установили MySQLdb, работают за пределами virtualenv, но внутри его не существует. Как разрешить?

    ZMQ: нет подписного сообщения в гнезде XPUB для нескольких подписчиков (шаблон кэширования последнего значения)

    Как я могу установить прокси с аутентификацией в selenium chrome веб-драйвер, используя python

    анализировать и изменять имена хостов

    Ошибка при попытке входа на веб-страницу с использованием selenium с python

    упаковать столбцы данных в список в пандах

    Как встроить графическую интерактивную оболочку IronPython в приложение?

    Python SQLAlchemy: AttributeError: ни объект «Столбец», ни объект «Компаратор» не имеют атрибута «схема»,

    Перегрузка динамического оператора на классы dict в Python

    Dynamodb2 Table.get_item () throws ValidationException «Число условий на ключах недействительно»

    Исключение строк с помощью python mysql.connector

    использование обратной косой черты в python (не для выхода)

    Python - лучший язык программирования в мире.