2011-10-20 13 views
6

Desidero sapere quale sarebbe un metodo efficace per invertire i dizionari in python. Voglio anche sbarazzarmi dei valori duplicati confrontando i tasti e scegliendo il più grande sopra il più piccolo assumendo che possano essere confrontati. Qui sta invertendo un dizionario:Inversione di dizionari in Python

inverted = dict([[v,k] for k,v in d.items()]) 

risposta

8

Per rimuovere i duplicati utilizzando la chiave più grande, ordinare l'iteratore del dizionario in base al valore. La chiamata a dict utilizzerà l'ultima chiave inserita:

import operator 
inverted = dict((v,k) for k,v in sorted(d.iteritems(), key=operator.itemgetter(1))) 
0

Ecco un'implementazione semplice e diretto di invertire un dizionario e mantenendo il più grande di tutti i valori duplicati:

inverted = {} 
for k, v in d.iteritems(): 
    if v in inverted: 
     inverted[v] = max(inverted[v], k) 
    else: 
     inverted[v] = k 

Questo può essere stretto-up un po 'con dict.get():

inverted = {} 
for k, v in d.iteritems(): 
    inverted[v] = max(inverted.get(v, k), k) 

Questo codice permette un minor numero di confronti e usa meno memoria di un approccio con ordinato().

+7

"Voglio anche a liberarsi di valori duplicati confrontando le chiavi e la scelta del più grande sopra il più piccolo ammesso che possono essere confrontati". – agf