web-dev-qa-db-fra.com

Comment obtenir une valeur aléatoire dans le dictionnaire python

Comment puis-je obtenir une paire aléatoire d'un dict? Je fais un jeu où vous devez deviner la capitale d'un pays et j'ai besoin de questions pour apparaître au hasard.

La dict ressemble à {'VENEZUELA':'CARACAS'}

Comment puis-je faire ceci?

130
tekknolagi

Une façon (en Python 2. *) serait:

import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.keys()))

EDIT: La question a été modifiée quelques années après le message d'origine et demande désormais une paire plutôt qu'un seul élément. La dernière ligne devrait maintenant être:

country, capital = random.choice(list(d.items()))
226
Gerrat

J'ai écrit ceci en essayant de résoudre le même problème:

https://github.com/robtandy/randomdict

Il dispose de O(1) accès aléatoire aux clés, aux valeurs et aux éléments.

25
Rob T

Si vous ne souhaitez pas utiliser le module random, vous pouvez également essayer popitem () :

>> d = {'a': 1, 'b': 5, 'c': 7}
>>> d.popitem()
('a', 1)
>>> d
{'c': 7, 'b': 5}
>>> d.popitem()
('c', 7)

Puisque la dictne conserve pas l'ordre , en utilisant popitem, vous obtenez des éléments dans un ordre arbitraire (mais pas strictement aléatoire).

Gardez également à l'esprit que popitem supprime la paire clé-valeur du dictionnaire, comme indiqué dans le docs .

popitem () est utile pour parcourir de manière destructive un dictionnaire

15
patriciasz
>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'

En appelant random.choice sur la keys du dictionnaire (les pays).

9
user225312

Essaye ça:

import random
a = dict(....) # a is some dictionary
random_key = random.sample(a, 1)[0]

Cela fonctionne vraiment.

9
lavee_singh

Depuis le message original voulait le paire:

import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
country, capital = random.choice(list(d.items()))

(style python 3)

4
OBu

Si vous ne voulez pas utiliser random.choice (), vous pouvez essayer ceci:

>>> list(myDictionary)[i]
'VENEZUELA'
>>> myDictionary = {'VENEZUELA':'CARACAS', 'IRAN' : 'TEHRAN'}
>>> import random
>>> i = random.randint(0, len(myDictionary) - 1)
>>> myDictionary[list(myDictionary)[i]]
'TEHRAN'
>>> list(myDictionary)[i]
'IRAN'
4

Cela fonctionne dans Python 2 et Python 3:

Une clé aléatoire:

random.choice(list(d.keys()))

Une valeur aléatoire

random.choice(list(d.values()))

Une clé et une valeur aléatoires

random.choice(list(d.items()))
3
firelynx

Je suppose que vous faites une application de type quiz. Pour ce type d'application, j'ai écrit une fonction qui est la suivante:

def shuffle(q):
"""
The input of the function will 
be the dictionary of the question
and answers. The output will
be a random question with answer
"""
selected_keys = []
i = 0
while i < len(q):
    current_selection = random.choice(q.keys())
    if current_selection not in selected_keys:
        selected_keys.append(current_selection)
        i = i+1
        print(current_selection+'? '+str(q[current_selection]))

Si je vais donner l’entrée de questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'} et appeler la fonction shuffle(questions), alors le résultat sera le suivant:

VENEZUELA? CARACAS 
 CANADA? TORONTO 

Vous pouvez étendre cela encore plus en mélangeant les options aussi

3
Anivarth

Puisque c'est un devoir:

Départ random.sample() qui sélectionnera et retournera un élément aléatoire de la liste. Vous pouvez obtenir une liste de clés de dictionnaire avec dict.keys() et une liste de valeurs de dictionnaire avec dict.values().

3
carl

Essayez ceci (en utilisant random.choice à partir d’articles)

import random

a={ "str" : "sda" , "number" : 123, 55 : "num"}
random.choice(list(a.items()))
#  ('str', 'sda')
random.choice(list(a.items()))[1] # getting a value
#  'num'
1
Herman Yanush
b = { 'video':0, 'music':23,"picture":12 } 
random.choice(Tuple(b.items())) ('music', 23) 
random.choice(Tuple(b.items())) ('music', 23) 
random.choice(Tuple(b.items())) ('picture', 12) 
random.choice(Tuple(b.items())) ('video', 0) 
0
ziya efkar