Valeur random de clef random du dictionnaire

Résolu/Fermé
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 - Modifié le 10 août 2018 à 09:30
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 - 16 août 2018 à 13:28
Bonjour,

import random

dictionnaire = {
'clef':'valeur1' 'valeur2',
'clef1':'valeur1' 'valeur2'
}

random.choice(dictionnaire.keys())


Cette fonction permet de choisir aléatoirement une clef dans un dictionnaire.

Dans le même esprit, comment est-il possible, en suite, de choisir, aléatoirement, une valeur dans la clef au préalablement choisie aléatoirement ?

car il semble qu'en affectant la fonction suivante comme étant une variable, on se retrouve avec un 'str' et de ce fait toute opération soit inutilisable:
a=random.choice(dictionnaire.keys())


La première idée était de changer les clefs en list... est-ce une bonne voie ?

Cordialement
PS le titre n'est pas clair, pas facile







EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
Modifié le 9 août 2018 à 21:03
bonjour, ton code fonctionne-t-il bien, sans message d'erreur?
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
Modifié le 9 août 2018 à 21:29
bonjour yg,

en fait le random.choice() renvoi une clé aléatoire, donc ok.
cependant, comme cette clé contient des valeurs, je me demande bien comment sélectionner une seule valeur aléatoirement à partir de la clé choisie préalablement. Soit à partir du résultat de la fonction précédente.
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1 > jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020
Modifié le 9 août 2018 à 21:44
avec
random.choice(dictionnaire.values())
on se retrouve avec l'ensemble des valeurs de n'importe quelle clé, ce qui n'est pas mon souhait.
Ce qu'il faut c'est que, aléatoirement, pour une des deux clés il y ait une seule valeur associée.
en quelques mots, réinjecter le résultat de la clé dans l'opération sur la valeur.
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
Modifié le 10 août 2018 à 01:22
comment fait-on par exemple pour choisir une Paire clé valeur au hasard. ça paraît évident qu'ensuite je pourrai plus facilement choisir une valeur au hasard puisqu'il n'y aura plus qu'une clé. j'ai une idée avec l'instruction random.choice(dictionnaire.items()) qui me permettrait de sortir une seule paire clé Valeur sous la forme d'un tupple. mais le tupple devra être définie si je souhaite invoquer la fonction random. je tourne en rond
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020
Modifié le 10 août 2018 à 09:26
que vois-tu quand tu fais
print(random.choice(tuple(dictionnaire.values())))
?
ou bien
print(dictionnaire.get(random.choice(dictionnaire.keys())))
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
Modifié le 10 août 2018 à 14:47
print(random.choice(tuple(dictionnaire.values())))? 
renvoi toute les valeurs
La seconde également
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
10 août 2018 à 09:53
et ainsi?
import random

dictionnaire = {
'clef':['valeur1', 'valeur2'],
'clef1':['valeur11','valeur12']
}
print(random.choice(random.choice(tuple(dictionnaire.values()))))
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
Modifié le 10 août 2018 à 15:30
exact, l'oubli des virgules.
merci oui cela marche, mais comment vérifier à l'écran que la clé soit bien celle de la valeur retournée ?
Car l'instruction suivante
print(random.choice(random.choice(tuple(dictionnaire.values()))))
bien qu'elle soit très interessante, ne permet pas de faire les choses de manière graduelle. Par exemple, si en premier on sélectionne aléatoirement une clé, et qu'un raw_input() vient là pour permettre une validation ou une demande, comment, à partir de la clé trouvée on pourrais ensuite sélectionner aléatoirement une valeur ?
Un détaille, mais si possible il faut que l'on sache d'abord quelle est la clé, et ensuite une valeur correspondante est sélectionnée aléatoirement.

je me penche sur la question en même temps, tuple() change la liste des valeurs du dico en tuple, mais est-ce utile ?

dictionnaire = {}
dictionnaire['clef']='valeur1', 'valeur2'
dictionnaire['clef1']='valeur1', 'valeur2'


J'ai essayé quelque chose, j'ai eu le message d'erreur suivant:
built-in method keys of dict object at 0x10c5dc5c


En tout cas yg_be merci de me faciliter la vie comme tu fais.
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020
10 août 2018 à 15:18
plus graduel:
import random

dictionnaire = {
'clef':['valeur1', 'valeur2'],
'clef1':['valeur11','valeur12']
}
ak= tuple(dictionnaire.keys())
rk=random.choice(ak)
vrk=dictionnaire.get(rk)
rvrk=random.choice(vrk)
print (rk, vrk, rvrk)
chez moi, cela ne fonctionne pas sans faire tuple()
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020
10 août 2018 à 15:38
si tu demandes une explication pour un message d'erreur, il est utile de partager le programme complet, et d'indiquer à quelle ligne l'erreur se produit.
0
jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020 1
Modifié le 10 août 2018 à 16:36
merci,

cela a l'air tout à fait juste.
C'est parfait, merci.

Il ne me reste plus qu'à gérer les fichiers, maintenant.

Merci pour l'aide fournie que tu as pris sur ton temps personnel
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > jeremyccm Messages postés 50 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 24 mars 2020
11 août 2018 à 09:06
peux-tu alors marquer le sujet comme résolu, via la roue dentée à droite du titre?
0