2012-08-01 26 views
6

Duplicar posible:
Dictionary sorting by key lengthdiccionario ordenar por longitud de clave

tengo que usar el diccionario para "buscar y reemplazar". Y quiero que primero use las teclas más largas.

Para que

text = 'xxxx' 
dict = {'xxx' : '3','xx' : '2'} 
for key in dict: 
    text = text.replace(key, dict[key]) 

debería devolver "3x", no "22" como lo es ahora.

Algo así como

for key in sorted(dict, ???key=lambda key: len(mydict[key])): 

simplemente no puede obtener lo que hay dentro.
¿Es posible hacerlo en una cadena?

+3

'dict' es un muy mal nombre para un diccionario, se está remedando el built-in, – jamylak

+1

[pitón - Diccionario Clasificación por Key Largo] (http://stackoverflow.com/questions/11753758/dictionary -sorting-by-key-length) -> publicado 5 minutos antes de su pregunta – elssar

+0

No tengo ninguna conexión con él) Por lo tanto, 'ordenó (d.iteritems(), clave = lambda x: len (x [0])) 'parece una respuesta. – Qiao

Respuesta

14
>>> text = 'xxxx' 
>>> d = {'xxx' : '3','xx' : '2'} 
>>> for k in sorted(d, key=len, reverse=True): # Through keys sorted by length 
     text = text.replace(k, d[k]) 


>>> text 
'3x' 
+1

'key = len' es mágico – Qiao

+0

@Qiao Bueno, es lo mismo que' key = lambda k: len (k) 'que casi tenías, no hay necesidad de' lambda' en este caso, pero quizás eso lo aclare :) – jamylak

+0

Nunca he visto 'len' sin argumento. – Qiao

Cuestiones relacionadas