Python中sorted()/.sort()字典序排序结果不符合预期求助
为什么Python的sorted()排序结果和预期的字典序不符?
嘿,你完全没误解字典序的定义!问题出在Python默认的排序规则和我们日常认知里的“字典序”不是一回事儿~
问题根源
Python的sorted()函数(包括列表的.sort()方法)默认是按照字符的Unicode码点来排序的。在Unicode编码里,所有大写字母的码点都小于小写字母:比如大写Z的码点是90,而小写c的码点是99。所以当你直接排序时,Zrhregegrydb会因为首字母的码点更小,排在cygzRFWDWBdvF前面,这就是你看到的输出结果。
而我们日常说的“字典序”,通常是指忽略大小写的字母顺序——也就是把所有字母当成同一种大小写来比较,比如把Z和z视为相同优先级,只看字母本身的顺序。
解决方案:用key参数指定排序规则
只需要给sorted()加上key参数,把每个单词统一转成小写(或大写)后再比较,就能得到你期望的字典序了:
a_list = ['Zrhregegrydb', 'cygzRFWDWBdvF'] for word in sorted(a_list, key=str.lower): print(word)
输出结果:
cygzRFWDWBdvF Zrhregegrydb
这个方法的原理是:排序时不会修改原单词,只是根据每个单词转小写后的版本来确定顺序,最终输出的还是原单词本身。
额外说明
如果你的场景需要更严格的字典序(比如某些传统字典会把大写字母全部排在小写前面,但这种情况很少见),那Python默认的排序就是符合的。但绝大多数日常场景下,用key=str.lower(或key=str.upper)就能得到我们习惯的字典序啦~
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

