前一段时间我在这里问了这个问题: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
但是我还需要更多地对名称进行排序,如果名称的长度相同,我需要首先使用大写字母的名称。有什么想法吗?
答案 0 :(得分:1)
在第三个条件的元组中添加另一个条目。
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
我个人认为第二种方法更具可读性。