2012-08-01 21 views
6

Powiel możliwe:
Dictionary sorting by key lengthsłowniku sortować według długości klucza

muszę używać słownika dla "wyszukiwania i zamiany". I chcę, żeby najpierw używał najdłuższych kluczy.

Więc

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

powinien wrócić "3x", a nie "22" jak jest teraz.

Coś

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

prostu nie mogę się co jest w środku.
Czy można to zrobić w jednym ciągu?

+3

'dict' jest bardzo zła nazwa słownika, jesteś shadowing wbudowany, – jamylak

+1

[Pythona - słownik sortując długość klucza] (http://stackoverflow.com/questions/11753758/dictionary -sorting-by-key-length) -> napisałem 5 minut przed twoim pytaniem – elssar

+0

Nie mam z nim żadnego połączenia) Tak, "posortowane (d.iteritems(), klucz = lambda x: len (x [0])) 'wydaje się być odpowiedzią. – Qiao

Odpowiedz

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' jest magiczne – Qiao

+0

@Qiao Cóż, tak samo jak' key = lambda k: len (k) 'który prawie miałeś, nie ma potrzeby" lambda "w tym przypadku, ale może to sprawia, że ​​jest jaśniejszy :) – jamylak

+0

Nigdy nie widziałem' len' bez argumentów. – Qiao

Powiązane problemy