ZZM*_*ike 3 python sorting list
我有一个元组列表("twoples")
[('aaa',2), ('BBB',7), ('ccc',0)]
Run Code Online (Sandbox Code Playgroud)
我需要按顺序打印它,但是
>>> sorted([('aaa',2), ('BBB',7), ('ccc',0)])
Run Code Online (Sandbox Code Playgroud)
给
[('BBB', 7), ('aaa', 2), ('ccc', 0)]
list.sort(key=str.tolower)
Run Code Online (Sandbox Code Playgroud)
(显然)不起作用,因为
AttributeError: type object 'str' has no attribute 'tolower'
Run Code Online (Sandbox Code Playgroud)
我不想更改列表中的字符串.
另一个答案给了
list.sort(key=lambda (a, b): (a.lower(), b))
Run Code Online (Sandbox Code Playgroud)
但那必须是Python 2的东西,因为
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
... 一开始 (
itemgetter()没有用,因为只允许一个'key'
你是对的,这是Python 2的东西,但修复很简单:
list.sort(key=lambda a: (a[0].lower(), a[1]))
Run Code Online (Sandbox Code Playgroud)
这似乎并不那么清楚,因为这些名称a并b没有比a[0]和更具有内在意义a[1].(如果他们成功了,说,name和score什么的,这可能是一个不同的故事...)
Python 2允许您将函数参数解压缩为元组.在一些简单的情况下,这有效(并且有时很方便),但是有很多问题.有关它被移除的原因,请参阅PEP 3113.
处理这个问题的规范方法是将函数内部的值拆分,这在函数中并不常用lambda.但是有没有理由不能直接定义函数?
def twoplekey(ab):
a, b = ab
return a.lower(), b
list.sort(key=twoplekey)
Run Code Online (Sandbox Code Playgroud)
作为旁注,你真的不应该打电话给你的名单list; 隐藏list类型,所以你不能再使用它了(例如,如果你想通过写入将元组转换为列表list(tup),你将试图调用你的列表,并得到一个莫名其妙的错误).
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |