Controlla se una determinata chiave esiste già in un dizionario
Per avere un'idea di come fare, controlliamo prima quali metodi possiamo chiamare sul dizionario. Ecco i metodi:
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
Il metodo brutale per verificare se la chiave esiste già potrebbe essere il get()
metodo:
d.get("key")
Gli altri due metodi interessantiitems()
e keys()
sembra troppo lavoro. Quindi esaminiamo se get()
è il metodo giusto per noi. Abbiamo il nostro 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}
La stampa mostra che la chiave che non abbiamo sarà restituita None
:
print(d.get('key')) #None
print(d.get('clear')) #0
print(d.get('copy')) #1
Si può utilizzare che per avere le informazioni se la chiave è presente o no. Ma considera questo se creiamo un dict con un singolo key:None
:
d= {'key':None}
print(d.get('key')) #None
print(d.get('key2')) #None
Condurre questo get()
metodo non è affidabile nel caso in cui alcuni valori possano esserlo None
. Questa storia dovrebbe avere un finale più felice. Se utilizziamo il in
comparatore:
print('key' in d) #True
print('key2' in d) #False
Otteniamo i risultati corretti. Possiamo esaminare il codice byte 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
Ciò dimostra che l' in
operatore di confronto non è solo più affidabile ma anche più veloce di get()
.
dict.keys()
crea un elenco di chiavi, secondo la documentazione docs.python.org/2/library/stdtypes.html#dict.keys ma sarei sorpreso se questo modello non fosse ottimizzato per, in una seria implementazione, da tradurre aif 'key1' in dict:
.