Come posso scorrere tutti gli elementi di un dizionario in ordine casuale? Intendo qualcosa di casuale.shuffle, ma per un dizionario.Come eseguire iterazioni in dict in ordine casuale in Python?
risposta
Un dict
è un insieme non ordinato di coppie di valori-chiave. Quando si itera un dict
, è effettivamente casuale. Ma per randomizzare esplicitamente la sequenza di coppie chiave-valore, è necessario lavorare con un oggetto diverso che è ordinato, come una lista. dict.items()
, dict.keys()
, e dict.values()
ogni ritorno liste, che possono essere mescolate.
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]
Oppure, se non si preoccupano i tasti:
values=d.values() # List of values
random.shuffle(values) # Shuffles in-place
for value in values:
print value
Potete anche "ordina per casuale":
for key, value in sorted(d.items(), key=lambda x: random.random()):
print key, value
Non è possibile. Ottieni l'elenco delle chiavi con .keys()
, mischiale, quindi esegui un'iterazione nell'elenco durante l'indicizzazione del dettato originale.
Oppure utilizzare .items()
, e shuffle e iterare questo.
o 'dict.values ()', se invece si è i valori. –
Come Charles Brunet hanno già detto che il dizionario è una disposizione casuale di coppie di valori chiave. Ma per renderlo davvero casuale utilizzerai un modulo casuale. Ho scritto una funzione che provvederà a mischiare tutte le chiavi e così mentre si sta scorrendo che sarà l'iterazione in modo casuale. Si può comprendere più chiaramente vedendo il codice:
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
Ora, quando si chiama la funzione basta passare il parametro (il nome del dizionario che si desidera mescolare) e si otterrà un elenco di chiavi che vengono mescolate. Infine puoi creare un loop per la lunghezza dell'elenco e usare name_of_dictionary[key]
per ottenere il valore. Spero che questo aggiungerà un valore a questo stack :)
- 1. Come eseguire iterazioni su un dizionario Python in ordine definito?
- 2. Come posso eseguire i miei test JUnit in ordine casuale?
- 3. Blocco di dict in Python?
- 4. Rails: ciascuno in ordine casuale
- 5. Posso eseguire i test di esecuzione NUnit in ordine casuale?
- 6. Impossibile eseguire iterazioni su una classe elenco in Python
- 7. Numero di iterazioni in python?
- 8. Interleaving di più iterabili in ordine casuale preservando il loro ordine in python
- 9. python ordina in ordine casuale articoli dello stesso valore
- 10. convertire un dict per dict ordinato in python
- 11. Come eseguire iterazioni su più righe contemporaneamente in due file?
- 12. convertire xml in python dict
- 13. iterazione casuale in Python
- 14. I metodi richiamano in ordine casuale (C#)
- 15. Riorganizzare NSArray/MSMutableArray in ordine casuale
- 16. Tracciando un dict pitone in ordine di valori chiave
- 17. Restituire le righe in ordine casuale
- 18. Come eseguire iterazioni su MultiKeyMap?
- 19. in grado di riprendere l'attività in ordine casuale
- 20. jasmine dovrebbe eseguire le specifiche nell'ordine in cui sono dichiarate o in un ordine casuale?
- 21. Come posso eseguire iterazioni su più elenchi contemporaneamente in Perl?
- 22. Come eseguire iterazioni su un hash in Ruby?
- 23. Come eseguire iterazioni sui caratteri Unicode in C++?
- 24. Come eseguire iterazioni su oggetti all'interno dell'array in Lodash
- 25. Come eseguire iterazioni su Hash (di Hash) in Perl?
- 26. Come eseguire iterazioni su tutti i caratteri ASCII in Bash?
- 27. Come eseguire iterazioni su una stringa in C?
- 28. Come eseguire iterazioni su una struttura hash yaml in rubino?
- 29. Come eseguire il log in ordine inverso?
- 30. Numero casuale primo in python
In python3, 'd.Items()', 'd.keys()' e 'd.values ()' producono un oggetto iteratore. È necessario convertire esplicitamente quell'iteratore in elenco usando la funzione 'list()'. –
"Quando si itera un' dict', è effettivamente casuale "- non lo è. Fare affidamento su di esso per sembrare anche casuali sarebbe una cattiva idea, considerando che cose come gli Ints sono molto probabili che escano in ordine. Inoltre, l'ordinamento a chiave casuale è O (nlog (n)) invece di O (n), quindi dovrebbe probabilmente essere evitato. – user2357112
Come si adatterebbe questo per mescolare sempre il dizionario (mantenendo i collegamenti tra il tasto giusto al valore giusto nello stesso modo, ad esempio usando 'np.random.RandomState (100)'? –