2015-09-17 16 views
10

Ho un dizionarioSostituire le chiavi in ​​un dizionario

event_types={"as":0,"ah":0,"es":0,"eh":0,"os":0,"oh":0,"cs":0,"ch":0} 

Come posso sostituire a da append, s da see, h da horse, e da exp con uno spazio in mezzo. qualcosa

uscita come:

{"append see":0,"append horse":0,"exp horse":0....} 
+0

non è possibile eliminare le voci e ricreare nuove se la lista è così breve? – Julien

+1

@JulienBernu È più grande di quello. –

risposta

15

avere un altro dizionario con le sostituzioni, come questo

keys = {"a": "append", "h": "horse", "e": "exp", "s": "see"} 

Ora, se gli eventi si presentano così

event_types = {"as": 0, "ah": 0, "es": 0, "eh": 0} 

semplicemente ricostruire con la comprensione dizionario, come questo

>>> {" ".join([keys[char] for char in k]): v for k, v in event_types.items()} 
{'exp see': 0, 'exp horse': 0, 'append see': 0, 'append horse': 0} 

Qui, " ".join([keys[char] for char in k]), itera i caratteri nello k, recupera le parole corrispondenti dal dizionario keys e forma un elenco. Quindi, gli elementi della lista sono uniti con il carattere dello spazio, per ottenere la chiave desiderata.

+0

Non c'è bisogno di capire la lista: '" ".join ([keys [char] per char in k])' -> '" ".join (keys [char] per char in k)' – warvariuc

+0

@warvariuc join is generalmente più lento con gen exps. Ecco perché preferisco sempre la comprensione delle liste – thefourtheye

+0

Questa soluzione presuppone che tutte le vecchie chiavi debbano essere sostituite, non solo le varianti a due lettere. Basta notare questo come l'OP non ha detto nulla a riguardo – holroy

3

Itera su chiavi e valori del dizionario originale, trasformare la chiave, quindi memorizzare il valore nel dizionario risultato utilizzando il tasto trasformato. Per trasformare la chiave, mappare sui suoi caratteri, sostituire guardando in un dizionario di mappatura ({ "a" : "append", ... }), quindi unire con gli spazi.

2

Non sono sicuro se è possibile aggiungere o no, ma si può fare quanto segue uno di linea:

>>> dict={} 
>>> dict={"a":"b"} 
>>> dict["aha"]=dict.pop("a") 
>>> dict 
{'aha': 'b'} 

È possibile attraversare le chiavi e modificarli in base alle proprie necessità.

3

Innanzitutto creare un dizionario di mappatura per mappare le singole lettere alle parole:

mm={"a":"append", "s":"see","h":"horse","e":"exp","c":"corn","o":"ocelot"} 

quindi trasformare il vostro dizionario di input a un elenco di chiave, tuple di valore, riscrivere la chiave utilizzando il dict mappatura e creare una nuova lista di tuple costituite da nuova chiave, valore originale, trasformano finalmente la lista di tuple in un dettato.

dict(map(lambda e: ("%s %s" % (mm[e[0][0]], mm[e[0][1]]), e[1]), event_types.items())) 
Problemi correlati