Ian*_* Wu 3 python sorting list python-3.x
如果我的清单是
[('IL', 36), ('NJ', 81), ('CA', 81), ('DC', 52), ('TX', 39)]
,
我该如何排序才能得到结果
[('CA', 81), ('NJ', 81), ('DC', 52), ('TX', 39), ('IL', 36)]
?
非常简单:
your_list.sort(key=lambda e: (-e[1], e[0]))
Run Code Online (Sandbox Code Playgroud)
例如
>>> your_list = [('IL', 36), ('NJ', 81), ('CA', 81), ('DC', 52), ('TX', 39)]
>>> your_list.sort(key=lambda e: (-e[1], e[0]))
>>> your_list
[('CA', 81), ('NJ', 81), ('DC', 52), ('TX', 39), ('IL', 36)]
Run Code Online (Sandbox Code Playgroud)
请注意,上面对列表进行了适当的排序。如果您想将其包装在函数中而不修改原始列表,请使用sorted
def your_sort(your_list):
return sorted(your_list, key=lambda e: (-e[1], e[0]))
Run Code Online (Sandbox Code Playgroud)
如果您不方便这样做-somefield
,那么 Pythonic 方法将是利用 Python 排序的稳定性来进行多阶段排序。
a = [('IL', 36), ('NJ', 81), ('CA', 81), ('DC', 52), ('TX', 39)]
from operator import itemgetter
a.sort(key=itemgetter(0))
a.sort(key=itemgetter(1), reverse=True)
# [('CA', 81), ('NJ', 81), ('DC', 52), ('TX', 39), ('IL', 36)]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
525 次 |
最近记录: |