2011-01-11 13 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 i dic2 mają te same klucze, ale w innej kolejności.Python: Jak sprawdzić, czy dwa słowniki mają te same klucze?

Jak powiedzieć, że mają te same klucze (nie brać pod uwagę kolejności)?

+0

Nie sortowania klucze(), jeśli to możliwe. – user469652

+1

Dlaczego nie? To * prawdopodobnie * nie sortuje klucza, ale jest to dziwne i arbitralne ograniczenie. Czy to zadanie domowe? –

+2

"dic1 i dic2 mają te same klucze, ale w innej kolejności." - w słowniku Pythona nie ma sensu - klucze nie są uporządkowane. – eumiro

Odpowiedz

22

Pythona 2.7

dict views: Obsługuje bezpośrednie operacje Set, itp

>>> 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']) 

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

pyton 2.4+

set operation: bezpośredni iteracja nad klawiszami DICT do zestawu

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

To po prostu nazywa się "keys()" w Pythonie 3. –

+0

Thx @ Lennart! Naprawiony – kevpie

10
set(dic1.keys()) == set(dic2.keys()) 
+2

@ Lato: klucze do dyktatury nie mogą zawierać powielonych elementów, zgodnie z definicją dyktatora. –

+0

Tak, ale metoda keys() zwraca listę i nie mogę zagwarantować, że pozycje na dwóch listach są w tej samej kolejności. Dlatego używam zestawu. – gruszczy

0

nie jestem pewien, w jaki sposób zakończony dokonywania keys() zamian listę niesortowanych ale sorted(dict1.keys()) == sorted(dict2.keys()) powinno wystarczyć.

1

Możemy wykorzystać wszystkie

all(k in dic2 for k in dic1) and all(k in dic1 for k in dic2) 
+0

Można iść i len (dic1) == len (dic2) dla drugiej połowy –

Powiązane problemy