¿Cómo puedo obtener un par aleatorio de a dict
? Estoy haciendo un juego en el que debes adivinar la capital de un país y necesito preguntas para que aparezcan al azar.
El dict
parece{'VENEZUELA':'CARACAS'}
¿Cómo puedo hacer esto?
python
random
dictionary
key
tekknolagi
fuente
fuente
d.keys()
hay una lista, pero no funcionará en Python 3.x donded.keys()
hay un iterador. Deberías hacer en surandom.choice(list(d.keys()))
lugar.d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
Jeje, +1 para el lavado de cerebro muy sutil ...Escribí esto tratando de resolver el mismo problema:
https://github.com/robtandy/randomdict
Tiene O (1) acceso aleatorio a claves, valores y elementos.
fuente
Prueba esto:
Esto definitivamente funciona.
fuente
Si no desea utilizar el
random
módulo, también puede probar popitem () :Como
dict
no conserva el orden , al usarlopopitem
obtienes elementos en un orden arbitrario (pero no estrictamente aleatorio).También tenga en cuenta que
popitem
elimina el par clave-valor del diccionario, como se indica en los documentos .fuente
next
no funciona con un diccionario, ya que es un mapeo. (Vine aquí en busca de inspiración y esto fue todo).Llamando a random.choice en el
keys
diccionario (los países).fuente
random.choice(list(d.keys()))
.Esto funciona en Python 2 y Python 3:
Una clave aleatoria:
Un valor aleatorio
Una clave y un valor aleatorios
fuente
Si no quieres usar random.choice () puedes intentarlo de esta manera:
fuente
list(…)
aquí varias veces. ¿Qué talmyDictionary_list = list(myDictionary)
?Como la publicación original quería la pareja :
(estilo python 3)
fuente
Como esto es tarea:
Vea
random.sample()
cuál seleccionará y devolverá un elemento aleatorio de una lista. Puede obtener una lista de claves de diccionario condict.keys()
y una lista de valores de diccionario condict.values()
.fuente
random.sample
yrandom.choice
no puede trabajar con iteradores. Necesitan saber la longitud de la secuencia, que no se puede determinar a partir de un iterador.random.sample
devuelve elementosk
aleatorios , devuelve un único elemento aleatoriorandom.choice
Supongo que está haciendo una aplicación de tipo cuestionario. Para este tipo de aplicación, he escrito una función que es la siguiente:
Si voy a dar la entrada de
questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
y llamar a la funciónshuffle(questions)
entonces la salida será la siguiente:Puede ampliar esto aún más barajando las opciones también
fuente
selected_keys
. Y probablemente repetirás eso unas 100 veces. Al menos elimine las claves tomadas de q likedel(q[current_selection])
: puede sobrescribir q con el nuevo aleatorioselected_keys
comoq = selected_keys
después de todo. ¡Tampoco te olvides de identificarte! Alternativamente, mira minp.random.choice(...)
enfoque: stackoverflow.com/a/62843377/4575793Prueba esto (usando random.choice de los elementos)
fuente
Con las versiones modernas de Python (desde 3), los objetos devueltos por métodos
dict.keys()
,dict.values()
ydict.items()
son objetos de vista *. Y bueno, se puede repetir, porrandom.choice
lo que no es posible usarlo directamente , ya que ahora no son una lista o un conjunto.Una opción es usar la comprensión de la lista para hacer el trabajo con
random.choice
:Referencias
fuente
fuente
Encontré esta publicación buscando una solución bastante comparable. Para seleccionar múltiples elementos de un dict, esto se puede usar:
fuente