我是一个刚刚阅读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?
非常感谢你的答案,请不要严厉地评判;)
答案 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"))
。