
Questo articolo descrive come ottenere la chiave dal valore in un dizionario (oggetto di tipo dict) in Python.
- Ottieni la chiave dal valore con la comprensione dell’elenco e gli elementi()
- Esempi di codici per estrarre chiavi con diverse condizioni
Per ottenere il valore dalla chiave, basta specificare la chiave come segue.
d = {'key1': 'aaa', 'key2': 'aaa', 'key3': 'bbb'}
value = d['key1']
print(value)
# aaa
Puoi anche usare il metodo get() per ottenere il valore dalla chiave. Se si utilizza il metodo get(), non viene generato alcun errore anche se si specifica una chiave che non esiste. Vedi il seguente articolo.
Puoi anche usare il metodo keys() per ottenere un elenco di tutte le chiavi.
Ottieni la chiave dal valore con la comprensione dell’elenco e gli elementi()
Per ottenere la chiave dal valore nel dizionario, utilizzare la comprensione dell’elenco e il metodo items().
Per le comprensioni degli elenchi ei cicli per per i dizionari, vedere gli articoli seguenti.
Di seguito è riportato un codice di esempio per ottenere un elenco di chiavi associate a un valore specificato. Se la chiave con il valore specificato non esiste, viene restituito un elenco vuoto.
d = {'key1': 'aaa', 'key2': 'aaa', 'key3': 'bbb'}
keys = [k for k, v in d.items() if v == 'aaa']
print(keys)
# ['key1', 'key2']
keys = [k for k, v in d.items() if v == 'bbb']
print(keys)
# ['key3']
keys = [k for k, v in d.items() if v == 'xxx']
print(keys)
# []
Se si desidera ottenere la chiave stessa invece dell’elenco, è possibile specificare il primo elemento dell’elenco con [0].
Si noti che se una chiave con il valore specificato non esiste, sarà un elenco vuoto, quindi specificando [0] si solleverà IndexError.
key = [k for k, v in d.items() if v == 'aaa'][0]
print(key)
# key1
key = [k for k, v in d.items() if v == 'bbb'][0]
print(key)
# key3
# key = [k for k, v in d.items() if v == 'xxx'][0]
# print(key)
# IndexError: list index out of range
Se si ripete la stessa operazione, è utile rendere una funzione.
def get_keys_from_value(d, val):
return [k for k, v in d.items() if v == val]
keys = get_keys_from_value(d, 'aaa')
print(keys)
# ['key1', 'key2']
Per i dizionari che non hanno valori duplicati, è possibile anche la seguente funzione.
Se esiste una chiave con il valore specificato, viene restituita quella chiave, altrimenti viene restituito None. Se i valori sono duplicati, viene restituita una delle chiavi.
def get_key_from_value(d, val):
keys = [k for k, v in d.items() if v == val]
if keys:
return keys[0]
return None
key = get_key_from_value(d, 'aaa')
print(key)
# key1
key = get_key_from_value(d, 'bbb')
print(key)
# key3
key = get_key_from_value(d, 'xxx')
print(key)
# None
Nell’esempio precedente vengono estratte le chiavi il cui valore è uguale al valore specificato.
È possibile estrarre chiavi in varie condizioni modificando la parte dell’espressione condizionale della comprensione dell’elenco.
d_num = {'key1': 1, 'key2': 2, 'key3': 3}
keys = [k for k, v in d_num.items() if v >= 2]
print(keys)
# ['key2', 'key3']
keys = [k for k, v in d_num.items() if v % 2 == 1]
print(keys)
# ['key1', 'key3']
d_str = {'key1': 'aaa@xxx.com', 'key2': 'bbb@yyy.net', 'key3': 'ccc@zzz.com'}
keys = [k for k, v in d_str.items() if v.endswith('com')]
print(keys)
# ['key1', 'key3']