按长度排序的列表,但在步骤中按字母顺序排列相同的长度

Gri*_*han 6 python python-2.6

我的Python字符串列表类似x但足够长:

x = ['aaa','ab','aa','c','a','b','ba']      
Run Code Online (Sandbox Code Playgroud)

我想对此列表进行排序为: ['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa']和我一样在以下2步:

>>> x.sort()   
>>> x.sort(key=len)      
>>> x
['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa']   
Run Code Online (Sandbox Code Playgroud)

但我需要一步到位:我还使用lambda函数绑定(采取帮助):

>>> x.sort(key=lambda item: (item, len(item)))
>>> x
['a', 'aa', 'aaa', 'ab', 'b', 'ba', 'c']  
Run Code Online (Sandbox Code Playgroud)

但不是我想要的:

有可能一步到位吗?让我开心.

我的Python:

~$ python --version  
Python 2.6.6
Run Code Online (Sandbox Code Playgroud)

Gar*_*tty 9

你得到了元组的顺序错误的方式.当Python对元组进行排序时,第一个值是排序,第二个值是子排序等等 - 您的代码假设相反的顺序.

您希望按长度排序,然后按字母顺序排序:

>>> x.sort(key=lambda item: (len(item), item))
>>> x
['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa']
Run Code Online (Sandbox Code Playgroud)

编辑:正如DSM在评论中指出的那样,Python首先将字母排序为大写字母,然后是小写字母.如果不需要此行为,请参阅此答案.