Python 3 列表:如何根据数字和字母对 [('NJ', 81), ('CA', 81), ('DC', 52)] 进行排序?

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)]

Rya*_*ing 5

非常简单:

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)


Jon*_*nts 5

如果您不方便这样做-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)