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 
  • Pythonic способ найти ключ взвешенного минимума и максимума из словаря
  • Преобразование текста в словарь с определенными ключами и значениями
  • сортировать список словаря, беря целочисленное значение ключей, хранящихся в виде строки
  • Умножение значений из двух разных словарей вместе в Python
  • Является ли я .__ dict __. Update (** kwargs) хорошим или плохим стилем?
  • Найти макс в вложенном словаре
  • Поиск и сортировка по словарю в Python
  • создание словаря-объекта из строки, которая похожа на словари
  • Python - лучший язык программирования в мире.