2011-01-11 55 views
7
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具有相同的密鑰,但順序不同。Python:如何知道兩個字典是否有相同的密鑰

如何判斷它們是否有相同的鍵(不考慮順序)?

+0

不要鍵(),如果可能的話進行排序。 – user469652 2011-01-11 09:58:19

+1

爲什麼不呢?它*可能不會對關鍵字進行排序,但這是一個奇怪的任意限制。這是功課嗎? – 2011-01-11 10:05:27

+2

「dic1和dic2具有相同的密鑰,但順序不同。」 - 這是一個python字典中的無意義 - 鍵沒有排序。 – eumiro 2011-01-11 10:32:06

回答

22

蟒蛇2.7

dict views 支持直接操作集等

>>> 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'} 

蟒蛇2.4 +

set operation直接迭代過字典的鍵成一組

>>> dic1 = {'a':'a','b':'c','c':'d'} 
>>> dic2 = {'b':'a','a':'c','c':'d'} 
>>> set(dic1) == set(dic2) 
True 
10
set(dic1.keys()) == set(dic2.keys()) 
+2

@Summer:字典的鍵不能包含重複的元素,由dict的定義。 – 2011-01-11 10:05:01

0

我不知道你怎麼落幕讓keys()回報,你的無序列表,但sorted(dict1.keys()) == sorted(dict2.keys())應該這樣做。

1

我們可以使用所有

all(k in dic2 for k in dic1) and all(k in dic1 for k in dic2) 
相關問題