¿Cómo puedo repetir todos los elementos de un diccionario en orden aleatorio? Me refiero a algo aleatorio.shuffle, pero para un diccionario.¿Cómo iterar a través de dict en orden aleatorio en Python?
Respuesta
A dict
es un conjunto desordenado de pares clave-valor. Cuando itera un dict
, es efectivamente aleatorio. Pero para aleatorizar explícitamente la secuencia de pares clave-valor, debe trabajar con un objeto diferente que se ordena, como una lista. dict.items()
, dict.keys()
y dict.values()
cada listas de devolución, que se pueden barajar.
items=d.items() # List of tuples
random.shuffle(items)
for key, value in items:
print key, value
keys=d.keys() # List of keys
random.shuffle(keys)
for key in keys:
print key, d[key]
O bien, si no se preocupan por las teclas:
values=d.values() # List of values
random.shuffle(values) # Shuffles in-place
for value in values:
print value
también puede "ordenar por azar":
for key, value in sorted(d.items(), key=lambda x: random.random()):
print key, value
No puede. Obtenga la lista de claves con .keys()
, revíselos, luego repita la lista e indexe el dict original.
O use .items()
, y mezcle e itere eso.
O 'dict.values ()' si lo que quieres es los valores. –
Como Charles Brunet han dicho ya que el diccionario es una disposición aleatoria de los pares clave de valores. Pero para que sea realmente aleatorio, usarás un módulo aleatorio. He escrito una función que mezclará todas las teclas y, por lo tanto, mientras la itera, estará iterando aleatoriamente. Se puede entender con más claridad al ver el código:
def shuffle(q):
"""
This function is for shuffling
the dictionary elements.
"""
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
return selected_keys
Ahora, cuando se llama a la función sólo tiene que pasar el parámetro (el nombre del diccionario que desea barajar) y obtendrá una lista de claves que se barajan. Finalmente puede crear un ciclo para la longitud de la lista y usar name_of_dictionary[key]
para obtener el valor. Hope esto añadirá un valor a esta pila :)
- 1. ¿Cómo puedo iterar a través de una cadena en Python?
- 2. ¿Cómo revertir el orden de las claves en python dict?
- 3. En Python, ¿qué determina el orden al iterar a través de kwargs?
- 4. Python: ordenar este diccionario (dict en dict)
- 5. Python dict a JSON a través de json.loads:
- 6. ¿Cómo iterar a través de dos listas en paralelo?
- 7. Devuelve filas en orden aleatorio
- 8. matriz multidimensional en orden aleatorio
- 9. Iterar a través de DataSet
- 10. Métodos de llamada en orden aleatorio (C#)
- 11. Cómo iterar a través de SAFEARRAY **
- 12. Cómo iterar a través de una cadena
- 13. Cómo iterar a través de un fd_set
- 14. Cómo iterar a través de una DataTable
- 15. Iterar a través fechas en SQL
- 16. orden aleatorio de imágenes en php
- 17. ¿Cómo iterar a través de hash (de Hashes) en Perl?
- 18. Iterar a través de los miembros de la clase en orden de su declaración
- 19. Decimal aleatorio en python
- 20. Python Plantilla Django: Iterar a través de la lista
- 21. en python, ¿cómo iterar un dict anidado con un número dinámico de nidos?
- 22. cómo iterar a través de las propiedades internas en C#
- 23. Cómo iterar a través de objetos anidados en JS
- 24. ¿Cómo puedo iterar a través de elementos DOM en PHP?
- 25. Convirtiendo Python dict a kwargs?
- 26. Orden aleatorio de filas Matlab
- 27. Reorganizar NSArray/MSMutableArray en orden aleatorio
- 28. ¿Cómo iterar a través de una lista de listas en python?
- 29. ¿Cómo iterar a través de una oración de cadena en Python?
- 30. Iterar a través de cada dígito en un número
En Python3, 'd.items()', 'd.keys()' y 'd.values ()' producen un objeto iterador. Necesita convertir explícitamente ese iterador a la lista usando la función 'list()'. –
"Cuando itera un' dict', es efectivamente aleatorio "- no lo es. Confiar en que incluso parezca aleatorio sería una mala idea, considerando que es muy probable que las cosas como las entradas salgan ordenadas. Además, la clasificación de clave aleatoria es O (nlog (n)) en lugar de O (n), por lo que probablemente debería evitarse. – user2357112
¿Cómo adaptar esto para mezclar siempre el diccionario (manteniendo los enlaces entre la tecla derecha al valor correcto de la misma manera, por ejemplo, usando 'np.random.RandomState (100)'? –