Vérifier si une clé donnée existe déjà dans un dictionnaire
Pour avoir une idée de comment faire cela, nous inspectons d'abord les méthodes que nous pouvons appeler dans le dictionnaire. Voici les méthodes:
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
La méthode brutale pour vérifier si la clé existe déjà peut être la get()
méthode:
d.get("key")
Les deux autres méthodes intéressantesitems()
et keys()
semblent trop de travail. Examinons donc si get()
c'est la bonne méthode pour nous. Nous avons notre dict d
:
d= {'clear':0, 'copy':1, 'fromkeys':2, 'get':3, 'items':4, 'keys':5, 'pop':6, 'popitem':7, 'setdefault':8, 'update':9, 'values':10}
L'impression montre que la clé que nous n'avons pas sera renvoyée None
:
print(d.get('key')) #None
print(d.get('clear')) #0
print(d.get('copy')) #1
Nous pouvons l' utiliser pour obtenir l'information si la clé est présente ou non. Mais considérez ceci si nous créons un dict avec un seul key:None
:
d= {'key':None}
print(d.get('key')) #None
print(d.get('key2')) #None
Diriger cette get()
méthode n'est pas fiable au cas où certaines valeurs pourraient l'être None
. Cette histoire devrait avoir une fin plus heureuse. Si nous utilisons le in
comparateur:
print('key' in d) #True
print('key2' in d) #False
Nous obtenons les bons résultats. Nous pouvons examiner le code d'octet Python:
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
Cela montre que l' in
opérateur de comparaison n'est pas seulement plus fiable mais encore plus rapide que get()
.
dict.keys()
crée une liste de clés, selon la documentation docs.python.org/2/library/stdtypes.html#dict.keys mais je serais surpris si ce modèle n'était pas optimisé pour, dans une implémentation sérieuse, à traduire àif 'key1' in dict:
.