dob*_*eis 11 python sorting list
我想对此信息(名称,点和时间)进行排序:
list = [
{'name':'JOHN', 'points' : 30, 'time' : '0:02:2'},
{'name':'KARL','points':50,'time': '0:03:00'}
]
Run Code Online (Sandbox Code Playgroud)
所以,我想要的是首先按照分数排序的列表,然后按时间排序(在我的例子中,因为他的时间较少,所以首先是亚马.有任何帮助吗?
我正在尝试这个:
import operator
list.sort(key=operator.itemgetter('points', 'time'))
Run Code Online (Sandbox Code Playgroud)
但得到了一个TypeError: list indices must be integers, not str
.
Pon*_*dle 20
你的例子适合我.我建议你不要list
用作变量名,因为它是一个内置类型.
您也可以尝试这样做:
list.sort(key=lambda item: (item['points'], item['time']))
Run Code Online (Sandbox Code Playgroud)
编辑:
>>> a = [
... {'name':'JOHN', 'points' : 30, 'time' : '0:02:20'},
... {'name':'LEO', 'points' : 30, 'time': '0:04:20'},
... {'name':'KARL','points':50,'time': '0:03:00'},
... {'name':'MARK','points':50,'time': '0:02:00'},
... ]
Run Code Online (Sandbox Code Playgroud)
使用sort()进行就地排序:
>>> a.sort(key=lambda x: (-x['points'],x['time']))
>>> pprint.pprint(a)
[{'name': 'MARK', 'points': 50, 'time': '0:02:00'},
{'name': 'KARL', 'points': 50, 'time': '0:03:00'},
{'name': 'JOHN', 'points': 30, 'time': '0:02:20'},
{'name': 'LEO', 'points': 30, 'time': '0:04:20'}]
>>>
Run Code Online (Sandbox Code Playgroud)
使用sorted返回排序列表:
>>> pprint.pprint(sorted(a, key=lambda x: (-x['points'],x['time'])))
[{'name': 'MARK', 'points': 50, 'time': '0:02:00'},
{'name': 'KARL', 'points': 50, 'time': '0:03:00'},
{'name': 'JOHN', 'points': 30, 'time': '0:02:20'},
{'name': 'LEO', 'points': 30, 'time': '0:04:20'}]
>>>
Run Code Online (Sandbox Code Playgroud)
>>> a.sort(key=lambda x: (x['points'],x['time']))
>>> import pprint
>>> pprint.pprint(a)
[{'name': 'JOHN', 'points': 30, 'time': '0:02:20'},
{'name': 'LEO', 'points': 30, 'time': '0:04:20'},
{'name': 'MARK', 'points': 50, 'time': '0:02:00'},
{'name': 'KARL', 'points': 50, 'time': '0:03:00'}]
>>>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5390 次 |
最近记录: |