不久前我在这里问了这个问题:Sorting lists in python
我这里有这段代码:
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
但是我还需要对名字进行更多的排序,如果名字的长度相同我需要大写字母排在第一位。有什么想法吗?
请您参考如下方法:
为第三个条件添加另一个条目到元组中。
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
我重写了您的代码,进行了一些样式更改:
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
我个人认为第二种方法更具可读性。
