2012-08-01 5 views
6

Mögliche Duplizieren:
Dictionary sorting by key lengthArt Wörterbuch von Schlüssellänge

Ich brauche Wörterbuch verwenden für "Suchen und Ersetzen". Und ich möchte, dass es zuerst die längsten Schlüssel verwendet.

Damit

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

sollte "3x" zurückzukehren, nicht "22", wie es jetzt ist.

So etwas wie

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

kann einfach nicht bekommen, was drin ist.
Ist es möglich, in einer Zeichenfolge zu tun?

+3

'dict' ist ein sehr schlechter Name für ein Wörterbuch, Sie Shadowing die eingebaute, – jamylak

+1

[Python - Wörterbuch Sortierung nach Schlüssellänge] (http://stackoverflow.com/questions/11753758/dictionary -sort-by-key-length) -> gepostet 5 Minuten vor deiner Frage – elssar

+0

Ich habe keine Verbindung damit :) Also, 'sortiert (d.iteritems(), key = lambda x: len (x [0])) Es scheint eine Antwort zu sein. – Qiao

Antwort

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' ist magisch – Qiao

+0

@Qiao Nun, es ist das gleiche wie' key = lambda k: len (k) 'was du fast hattest, es gibt keine Notwendigkeit für 'Lambda' in diesem Fall, aber vielleicht macht es das klarer :) – jamylak

+0

Ich habe' len' nie ohne Argument gesehen. – Qiao

Verwandte Themen