关于python:按名称和等级排序

Sort by name and rank

所以不久前我在这里问了这个问题:用python对列表进行排序

我这里有这个代码:

1
2
3
4
5
6
7
8
9
10
def sort(names, rank):
    lst=[]
    for x in range(0, len(names)):
        lst.append((int(rank[x]), names[x]))
    lst.sort(key=lambda x: (-x[0],len(x[1])) )
    newArr = []
    for z in range(0, len(lst)):
        row = lst[z]
        newArr.append(row[1] +"" + str(row[0]))
    return newArr

但我还需要对名称进行更多的排序,如果名称的长度相同,我需要以大写字母开头的名称。有什么想法吗?


为第三个条件在元组中添加另一个条目。

1
2
3
4
5
6
7
8
9
10
def sort(names, rank):
    lst=[]
    for x in range(0, len(names)):
        lst.append((int(rank[x]), names[x]))
    lst.sort(key=lambda x: (-x[0],len(x[1]), ord(x[1][0])) )
    newArr = []
    for z in range(0, len(lst)):
        row = lst[z]
        newArr.append(row[1] +"" + str(row[0]))
    return newArr

我重写了你的代码,做了一些样式更改:

1
2
3
4
5
6
7
8
9
def sort(names, rank):
    lst=[]
    for index, name in enumerate(names):
        lst.append((int(rank[index]), name))
    lst.sort(key=lambda x: (-x[0],len(x[1]),  ord(x[1][0])))
    output = []
    for row in lst:
        output.append(row[1] +"" + str(row[0]))
    return output

我个人认为第二种方法更具可读性。