蟒蛇。什么str.attribute可用于方法排序的键参数? set.sort(钥匙)

时间:2016-10-09 13:11:38

标签: python sorting set

我是一个刚刚阅读Lutz的新手,所以这个例子部分来自那本书:

l = ['aBe', 'ABD', 'abc'] #the following listing works ok
l.sort(key=str.lower)
l
>>>['abc', 'ABD', 'aBe']

问题是在这种情况下可以使用str.attribute吗?

l.sort(key=str.replace('Be', 'aa')) #why does not this works for example?

非常感谢你的答案,请不要严厉地评判;)

1 个答案:

答案 0 :(得分:2)

正如我评论的那样,密钥必须是可调用的,为了做你想做的事情你可以使用带有str.replace链式x.replace("B","a").replace("e","a")调用的 lambda 但是更好的解决方案是使用 str.translate

tbl = {ord("B"):"a", ord("e"):"a"}

l.sort(key=lambda x: x.translate(tbl))

或使用operator.methodcaller作为 Bakuriu 评论:

from operator import methodcaller

key=methodcaller('translate', tbl)

如果您只想匹配完整的子字符串,那么它就是一个简单的l.sort(key=lambda x: x.replace("Be","aa"))l.sort(key=methodcaller("replace","Be","aa"))