Wörterbücher, wie Sätze, halten nicht eine wohldefinierte, um auf ihre Elemente. Außerdem ist das Konzept einer Teilmenge der Regel nicht sinnvoll für Wörterbücher, so der dict Klasse nicht Operatoren wie <
unterstützen. Wörterbücher unterstützen den Begriff der Äquivalenz mit d1 == d2 , wenn die beiden Wörterbücher den gleichen Satz von Schlüssel- Wertpaaren enthalten.
Also, was Sie tun können, ist,
d1 == d2 #d1 is equivalent to d2
d1 != d2 #d1 is not equivalent to d2
jedoch nicht > < >= <=
tun Dies ist in Python 3.
>>> a
{1: '1', 2: '2'}
>>> b
{1: '1', 2: '2'}
>>> a==b
True
>>> a<b
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
a<b
TypeError: unorderable types: dict() < dict()
>>> a>b
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
a>b
TypeError: unorderable types: dict() > dict()
>>>
jedoch in Python 2 zu sehen, dies,
>>> a = {2:2}
>>> b = {2:2}
>>> a==b
True
>>> a<b
False
>>> a>b
False
Aber wenn die key
ist gleich und value
unterscheidet
>>> a={3:1}
>>> b={3:2}
>>> a<b
True
>>> a>b
False
Auch wenn value
gleich ist,
>>> a={3:0}
>>> b={3:0}
>>> a==b
True
>>> a<b
False
>>> a>b
False
Aber dies bemerken, wenn der Wert in der ersten dict
größer ist
>>> a={3:200}
>>> b={3:10}
>>> a<b
False
>>> a>b
True
Bis jetzt hatten wir dasselbe key
verschiedene values
jetzt wollen sie das ändern,
Jetzt Gleichen Wert unterschiedlichen Schlüssel
>>> a={2:10}
>>> b={3:10}
>>> a<b
True
>>> a>b
False
>>>
>>> a={10:10}
>>> b={1:10}
>>> a<b
False
>>> a>b
True
Was können Sie von diesem erhalten, Python 2 entweder Schlüssel wird überprüft und wenn es gleich, nur dann, Wert wird geprüft. Jetzt haben wir andere Schlüssel, andere Werte,
>>> a={10:10}
>>> b={1:100}
>>> a<b
False
>>> a>b
True
Aha! In diesem Fall können Sie schlussfolgern, dass key
das erste ist, was überprüft wird, und wenn sie gleich sind, wird der Wert geprüft. Jetzt haben wir mehr als ein key:value
Paar in unserem Wörterbuch?
>>> a={10:10,1:10}
>>> b={10:10,2:10}
>>> a<b
True
>>> a>b
False
>>> a={10:10,200:10}
>>> b={10:10,1:10}
>>> a<b
False
>>> a>b
True
So heißt es. Jeder key
wird überprüft und dann wird key
der gleiche Wert überprüft. Ah, aber wie funktioniert die Schlüsselüberprüfung? Dafür bei dict_compare source code
HINWEIS einen Blick: Die Methode cmp() gibt das Vorzeichen der Differenz von zwei Zahlen: -1, wenn x < y, 0, wenn x == y, oder 1, wenn x> y
Also, was passiert, ist, dass zu vergleichen, dicts A und B, Längen werden zuerst verglichen (gleich kein Problem). Wenn sie ungleich sind, dann gebe cmp zurück (len (A), len (B)).
Als nächstes finden Sie die Schlüssel akey
in A, die der kleinste Schlüssel ist, für die
akey not in B or A[akey] != B[akey]
-> (Dies geschieht nur, wenn akey in B).
(Wenn es keinen solchen Schlüssel ist, sind die dicts gleich.)
auch (muss), um den kleinsten Schlüssel bkey in B finden, für die
bkey not in A
oder A[bkey] != B[bkey]
-> (Diese passiert nur, wenn bkey in B vorhanden ist.
Wenn akey! = Bkey, geben Sie cmp (akey, bkey) zurück. Else Rückkehr cmp (A [akey], B [bkey])
>>> a={10:10,200:10}
>>> b={10:10,1:10}
>>> a<b
False
>>> a>b
True
>>> cmp(200,1)
1
>>> cmp(1,200)
-1
der kleinste Schlüssel in A
So nicht in B
ist 200
ähnlich 1
in A
.
Jetzt vergleicht intern Python sie nach dem oben genannten Algorithmus so cmp(200,1)
würde berechnet werden, wenn a>b
getan wird. Sonst wenn a<b
fertig ist.
Aber das war völlig aus Python entfernt 3. Dies ist nicht in Python 3.