Python: как узнать, имеют ли два словаря одинаковые ключи - PullRequest
11 голосов
/ 11 января 2011
dic1 = {'a':'a','b':'c','c':'d'}
dic2 = {'b':'a','a':'c','c':'d'}

dic1.keys()    =>['a', 'b', 'c']
dic2.keys()    =>['b', 'a', 'c']

dic1 и dic2 имеют одинаковые ключи, но в разном порядке.

Как определить, что они имеют одинаковые ключи (не учитывать порядок)?

Ответы [ 4 ]

27 голосов
/ 11 января 2011

питон 2.7

продиктованных просмотров : Поддерживает операции прямого набора и т. Д.

>>> dic1 = {'a':'a','b':'c','c':'d'}
>>> dic2 = {'b':'a','a':'c','c':'d'}
>>> dic1.viewkeys() == dic2.viewkeys()
True
>>> dic1.viewkeys() - dic2.viewkeys()
set([])
>>> dic1.viewkeys() | dic2.viewkeys()
set(['a', 'c', 'b'])

аналогично в 3.x: (thx @lennart)

>>> dic1 = {'a':'a','b':'c','c':'d'}
>>> dic2 = {'b':'a','a':'c','c':'d'}
>>> dic1.keys() == dic2.keys()
True
>>> dic1.keys() - dic2
set()
>>> dic1.keys() | dic2
{'a', 'c', 'b'}

Python 2,4 +

операция набора : прямая итерация по ключам ввода в набор

>>> dic1 = {'a':'a','b':'c','c':'d'}
>>> dic2 = {'b':'a','a':'c','c':'d'}
>>> set(dic1) == set(dic2)
True
11 голосов
/ 11 января 2011
set(dic1.keys()) == set(dic2.keys())
1 голос
/ 11 января 2011

Мы можем использовать все

all( k in dic2 for k in dic1) and all(k in dic1 for k in dic2)
0 голосов
/ 11 января 2011

Я не уверен, как вы закончили с keys() возвратом несортированного списка, но sorted(dict1.keys()) == sorted(dict2.keys()) должен это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...