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 :)
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)'? –