Überprüfen Sie, ob ein bestimmter Schlüssel bereits in einem Wörterbuch vorhanden ist
Um die Idee zu bekommen, wie das geht, überprüfen wir zuerst, welche Methoden wir im Wörterbuch aufrufen können. Hier sind die Methoden:
d={'clear':0, 'copy':1, 'fromkeys':2, 'get':3, 'items':4, 'keys':5, 'pop':6, 'popitem':7, 'setdefault':8, 'update':9, 'values':10}
Python Dictionary clear() Removes all Items
Python Dictionary copy() Returns Shallow Copy of a Dictionary
Python Dictionary fromkeys() Creates dictionary from given sequence
Python Dictionary get() Returns Value of The Key
Python Dictionary items() Returns view of dictionary (key, value) pair
Python Dictionary keys() Returns View Object of All Keys
Python Dictionary pop() Removes and returns element having given key
Python Dictionary popitem() Returns & Removes Element From Dictionary
Python Dictionary setdefault() Inserts Key With a Value if Key is not Present
Python Dictionary update() Updates the Dictionary
Python Dictionary values() Returns view of all values in dictionary
Die brutale Methode, um zu überprüfen, ob der Schlüssel bereits vorhanden ist, kann die folgende sein get()
:
d.get("key")
Die anderen beiden interessanten Methoden items()
und keys()
klingt nach zu viel Arbeit. Lassen Sie uns also untersuchen, ob dies get()
die richtige Methode für uns ist. Wir haben unser Diktat d
:
d= {'clear':0, 'copy':1, 'fromkeys':2, 'get':3, 'items':4, 'keys':5, 'pop':6, 'popitem':7, 'setdefault':8, 'update':9, 'values':10}
Der Druck zeigt, dass der Schlüssel, den wir nicht haben, zurückgegeben wird None
:
print(d.get('key')) #None
print(d.get('clear')) #0
print(d.get('copy')) #1
Wir können das verwenden, um die Informationen zu erhalten, ob der Schlüssel vorhanden ist oder nicht. Aber bedenken Sie dies, wenn wir ein Diktat mit einem einzigen erstellen key:None
:
d= {'key':None}
print(d.get('key')) #None
print(d.get('key2')) #None
Das Führen dieser get()
Methode ist nicht zuverlässig, falls einige Werte vorliegen None
. Diese Geschichte sollte ein glücklicheres Ende haben. Wenn wir den in
Komparator verwenden:
print('key' in d) #True
print('key2' in d) #False
Wir bekommen die richtigen Ergebnisse. Wir können den Python-Bytecode untersuchen:
import dis
dis.dis("'key' in d")
# 1 0 LOAD_CONST 0 ('key')
# 2 LOAD_NAME 0 (d)
# 4 COMPARE_OP 6 (in)
# 6 RETURN_VALUE
dis.dis("d.get('key2')")
# 1 0 LOAD_NAME 0 (d)
# 2 LOAD_METHOD 1 (get)
# 4 LOAD_CONST 0 ('key2')
# 6 CALL_METHOD 1
# 8 RETURN_VALUE
Dies zeigt, dass in
Vergleichsoperator nicht nur zuverlässiger, sondern sogar schneller ist als get()
.
dict.keys()
wird eine Liste mit Schlüsseln gemäß der Dokumentation docs.python.org/2/library/stdtypes.html#dict.keys erstellt. Ich wäre jedoch überrascht, wenn dieses Muster in einer ernsthaften Implementierung nicht für die Übersetzung optimiert wäre zuif 'key1' in dict:
.