
Cet article décrit comment obtenir la clé à partir de la valeur dans un dictionnaire (objet de type dict) en Python.
- Obtenir la clé de la valeur avec la compréhension de la liste et les éléments ()
- Exemples de codes pour extraire des clés avec diverses conditions
Pour obtenir la valeur par la clé, spécifiez simplement la clé comme suit.
d = {'key1': 'aaa', 'key2': 'aaa', 'key3': 'bbb'}
value = d['key1']
print(value)
# aaa
Vous pouvez également utiliser la méthode get() pour obtenir la valeur par la clé. Si vous utilisez la méthode get(), aucune erreur n’est générée même si vous spécifiez une clé qui n’existe pas. Voir l’article suivant.
Vous pouvez également utiliser la méthode keys() pour obtenir une liste de toutes les clés.
Obtenir la clé de la valeur avec la compréhension de la liste et les éléments ()
Pour obtenir la clé à partir de la valeur du dictionnaire, utilisez la compréhension de la liste et la méthode items().
Pour les compréhensions de liste et les boucles for pour les dictionnaires, consultez les articles suivants.
Voici un exemple de code permettant d’obtenir une liste de clés associées à une valeur spécifiée. Si la clé avec la valeur spécifiée n’existe pas, une liste vide est renvoyée.
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)
# []
Si vous souhaitez obtenir la clé elle-même au lieu de la liste, vous pouvez spécifier le premier élément de la liste avec [0].
Notez que si une clé avec la valeur spécifiée n’existe pas, ce sera une liste vide, donc spécifier [0] lèvera 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
Si vous répétez la même opération, il est utile d’en faire une fonction.
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']
Pour les dictionnaires qui n’ont pas de valeurs en double, la fonction suivante est également possible.
Si une clé avec la valeur spécifiée existe, cette clé est renvoyée, sinon None est renvoyé. Si les valeurs sont dupliquées, l’une des clés est renvoyée.
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
Dans l’exemple ci-dessus, les clés dont la valeur est égale à la valeur spécifiée sont extraites.
Vous pouvez extraire des clés dans diverses conditions en modifiant la partie expression conditionnelle de la compréhension de la liste.
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']