按键长度对字典进行排序

13

可能是重复问题:
按键长度排序字典

我需要使用字典进行“查找和替换”。我希望它首先使用最长的键。

因此,

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

应该返回"3x",而不是现在的"22"。

类似以下内容:

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

我只是得不到内部的东西。
有没有可能在一个字符串中完成?


4
“dict”这个名称用于表示字典非常不恰当,它会与Python内置函数重名,造成潜在的问题。 - jamylak
1
Python - 按键长度排序字典 --> 在您的问题之前5分钟发布 - elssar
我与此毫无关系。所以,sorted(d.iteritems(), key=lambda x: len(x[0]))看起来像是一个答案。 - Qiao
@Qiao,既然您不需要有序字典,我采用了不同的方法,只是对键进行排序,这样看起来更好。 - jamylak
1个回答

30
>>> 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'

3
@Qiao,这与您几乎掌握的 key=lambda k: len(k) 相同,这种情况下不需要使用 lambda,但可能会更清晰明了 :) - jamylak
我从未见过没有参数的 len - Qiao
1
@Qiao 这个代码的作用是用字典中的键来调用key函数进行排序,因为sorted会迭代字典的键并对每一个字典键调用key函数。另一个我喜欢的代码片段是sorted(d, key=d.get),它通过调用d.get函数并传入每个键作为参数来按字典的值进行排序。 - jamylak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接