2012-08-01 21 views
6

Olası Çoğalt:
Dictionary sorting by key lengthsıralama sözlüğü

ben "bul ve değiştir" için sözlük kullanmak gerekir. Ve ben bunu önce en uzun anahtarları kullanmasını istiyorum. şimdi olduğu gibi

Böylece

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

"3x" değil "22" dönmelidir. Sadece içinde ne olduğunu alamayan

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

gibi

şey.
Tek bir dizede yapmak mümkün mü?

+3

'dict' bir sözlüğe için çok kötü bir isimdir, yerleşik, – jamylak

+1

[piton - Anahtar uzunluğu sözlük Sıralama'yı] gölgeleme vardır (http://stackoverflow.com/questions/11753758/dictionary -sorting-by-key-length) -> – elssar

+0

sorusundan 5 dakika önce gönderdim onunla bağlantı yok) Yani, sıralanmış (d.iteritems(), anahtar = lambda x: len (x [0])) 'bir cevap gibi görünüyor. – Qiao

cevap

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

'anahtar = len 'sihirli – Qiao

+0

@Qiao Peki, bu aynı' key = lambda k: len (k) 'neredeyse sahip olduğunuz, bu durumda lambda 'gerek yok ama belki bunu daha net hale getirir :) – jamylak

+0

Ben argüman olmadan hiç görmedim. – Qiao