Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

trouver une clé à partir d'une valeur

2 réponses
Avatar
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

2 réponses

Avatar
Benoit Izac
Bonjour,

Le 02/02/2016 à 17:49, Kevin Denis a écrit dans le message
 :

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?



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
Avatar
Nicolas
Le 02/02/2016 19:20, Benoit Izac a écrit :
Bonjour,

Le 02/02/2016 à 17:49, Kevin Denis a écrit dans le message
:

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?



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]



Petite optimisation :

for k,value in d.iteritems() :
for v in value :
...

Ca évite de parser le dictionnaire à nouveau à chaque iteration.