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 |
号
我个人认为第二种方法更具可读性。