python将字符串转换为int并按字符串首先按降序排序,整数按升序排序?

Han*_*nny 0 python sorting

我有一个如下所示的列表: ["A", "X", "B", "3", "5", "1"]

我正在尝试找到一种方法来对此进行排序,因此它看起来像这样: ["X", "B", "A", 1, 3, 5]

我创建了一个小函数,在适当的情况下将列表字符串转换为整数:

def convert_list(list_to_convert: list) -> list:
    """If a list contains strings where some should be ints, this attempts to
    convert them to ints where appropriate"""
    converted_list = []
    for item in list_to_convert:
        try:
            item = int(item)
        except ValueError:
            pass
        converted_list.append(item)
    return converted_list
Run Code Online (Sandbox Code Playgroud)

这给了我["A", "X", "B", 3, 5, 1]

但我不确定如何让这个列表按字母降序排序,同时按升序排序整数。

我试过这个:

    sorted_int_grade_list = sorted(
        ordered_grade_list, key=lambda i: (isinstance(i, int), i)
    )
Run Code Online (Sandbox Code Playgroud)

但这给了我["A", "B", "X", 1, 3, 5] (阿尔法是错误的方向,整数是正确的)

我不确定如何以两种不同的方式对此进行排序 - 任何想法都会有帮助。

j1-*_*lee 7

您可以首先将它们分成两个列表,对每个列表进行排序,然后合并它们:

lst = ["A", "X", "B", "3", "5", "1"]

letters = []
numbers = []

for x in lst:
    try:
        numbers.append(int(x))
    except ValueError:
        letters.append(x)

output = [*sorted(letters, reverse=True), *sorted(numbers)] # uses generalized unpacking: PEP 448

print(output) # ['X', 'B', 'A', 1, 3, 5]
Run Code Online (Sandbox Code Playgroud)