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

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

А также

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

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

32
c00kiemonster 9 Июл 2010 в 11:59

5 ответов

Лучший ответ

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

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

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

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

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

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

30
Evan Teran 11 Фев 2020 в 04:55

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

len(set(d_1.keys()).difference(d_2.keys())) == 0
-2
Alex 9 Июл 2010 в 08:09

Одним из способов является проверка симметричной разности (новый набор с элементами в s или t но не оба)

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

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

set(d_1) == set(d_2)
0
miku 9 Июл 2010 в 08:07
>>> not set(d_1).symmetric_difference(d_2)
False
>>> not set(d_1).symmetric_difference(dict.fromkeys(d_1))
True
0
SilentGhost 9 Июл 2010 в 08:05

В Python2

set(d_1) == set(d_2)

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

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

Хотя способ Python2 тоже будет работать

31
John La Rooy 9 Июл 2010 в 08:12