2011-10-20 34 views
6

Quiero saber cuál sería un método eficiente para invertir diccionarios en python. También quiero deshacerme de los valores duplicados comparando las teclas y eligiendo las más grandes sobre las más pequeñas, suponiendo que se puedan comparar. Aquí está invirtiendo un diccionario:Invertir diccionarios en Python

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

Respuesta

8

Para eliminar duplicados utilizando la clave más grande, ordene su iterador de diccionario por valor. La llamada a dict utilizará la última llave insertada:

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

aquí es una aplicación sencilla y directa de la inversión de un diccionario y mantener el mayor de los valores duplicados:

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

Esto se puede apretar arriba un poco con dict.get():

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

Este código hace que un menor número de comparaciones y utiliza menos memoria que un enfoque usando ordenados().

+7

"También quiero para deshacerse de los valores duplicados mediante la comparación de las teclas y elegir el más grande sobre el pequeño asumiendo que puedan ser comparados." – agf

Cuestiones relacionadas