trouver une clé à partir d'une valeur
Le
Kevin Denis

Bonjour,
J'ai un dictionnaire qui associe à une clé un tableau de valeurs:
d= { 'A': ['a','aa'],
'B': ['b','bb','bbb'],
'C': ['c'],
etc }
Je cherche à faire une liste de clés à partir de certains valeurs
Par exemple:
'a' -> OK -> 'A'
'd' -> NOK
'aa' -> OK -> 'A'
'bb' -> OK -> 'B'
dans l'idée d'obtenir à la fin une liste de valeurs qui ne font partie
d'aucun tableau, et une liste de clés qui n'a jamais été utilisé. Dans
mon exemple, je cherche en sortie:
'd' -> valeur inconnue
'C' -> clé jamais utilisée.
Je peux parser l'intégralité du dictionnaire pour chaque valeur, mais
c'est long.
Je pensais créer un dictionnaire inversé:
inv_dict = { 'a': 'A',
'aa': 'A',
'b': 'B',
etc }
Mais est-ce qu'il n'existe pas quelquechose de tout fait? Ou une fonction python
qui sait faire ça tout seul?
Merci
--
Kevin
J'ai un dictionnaire qui associe à une clé un tableau de valeurs:
d= { 'A': ['a','aa'],
'B': ['b','bb','bbb'],
'C': ['c'],
etc }
Je cherche à faire une liste de clés à partir de certains valeurs
Par exemple:
'a' -> OK -> 'A'
'd' -> NOK
'aa' -> OK -> 'A'
'bb' -> OK -> 'B'
dans l'idée d'obtenir à la fin une liste de valeurs qui ne font partie
d'aucun tableau, et une liste de clés qui n'a jamais été utilisé. Dans
mon exemple, je cherche en sortie:
'd' -> valeur inconnue
'C' -> clé jamais utilisée.
Je peux parser l'intégralité du dictionnaire pour chaque valeur, mais
c'est long.
Je pensais créer un dictionnaire inversé:
inv_dict = { 'a': 'A',
'aa': 'A',
'b': 'B',
etc }
Mais est-ce qu'il n'existe pas quelquechose de tout fait? Ou une fonction python
qui sait faire ça tout seul?
Merci
--
Kevin
Le 02/02/2016 à 17:49, Kevin Denis a écrit dans le message
inv_dict = dict()
for k in d:
for v in d[k]:
inv_dict[v] = k
Ensuite tu n'as plus qu'à regarder si c'est dedans :
if val in inv_dict:
print('{} -> OK -> {}'.format(val, inv_dict[val]))
else
print('{} -> NOK'.format(val))
Évidemment si tu retrouves la même valeur pour différentes clés, il faut
adopter une stratégie différente car là tu va écraser la précédente clé
à chaque fois.
for k in d:
for v in d[k]:
if v in inv_dict:
inv_dict[v].append(k)
else
inv_dict[v] = [k]
--
Benoit Izac
Petite optimisation :
for k,value in d.iteritems() :
for v in value :
...
Ca évite de parser le dictionnaire à nouveau à chaque iteration.