Способ 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 не делает. Обратите внимание на то, что я не интересуюсь проверкой, что присваиваемые значения для каждого ключа являются тем же, просто что набор ключей является тем же.

24
задан SilentGhost 9 July 2010 в 08:13
поделиться

5 ответов

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

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

Вы можете сравнить множества с помощью ==

Подведем итоги:

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

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

27
ответ дан 28 November 2019 в 22:48
поделиться

В Python2,

set(d_1) == set(d_2)

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

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

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

30
ответ дан 28 November 2019 в 22:48
поделиться

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

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

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

set(d_1) == set(d_2)
0
ответ дан 28 November 2019 в 22:48
поделиться

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

len(set(d_1.keys()).difference(d_2.keys())) == 0
-2
ответ дан 28 November 2019 в 22:48
поделиться
>>> not set(d_1).symmetric_difference(d_2)
False
>>> not set(d_1).symmetric_difference(dict.fromkeys(d_1))
True
0
ответ дан 28 November 2019 в 22:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: