Skip to content

Ottenere una chiave da un valore in un dizionario in Python

Python

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']