簡體   English   中英

如何按數字(降序)和字母順序對元組的相同索引排序? [蟒蛇]

[英]How do I sort the same index of a tuple by Numerically (descending) and Alphabetically? [Python]

我被設置為通過像這樣的函數的參數對給定的元組列表進行排序的任務。 我必須獲得僅使用兩行代碼即可運行的功能。 排序順序如下:1)等級2)姓氏3)姓氏

因此,例如一個doctest將是:

sortStudents([('Tim Smith', 54), ('Anna Smith', 88), ('Barry Thomas', 88)])

這是我到目前為止的內容:

def sortStudents(a):
    return (sorted(a, key=lambda x: (-x[1], x[0].split()[1], x[0].split()[0])))

我已經完成了這些測試。 但是,我無法通過的最后一個文檔測試是字母等級而不是數字等級。 當我按降序對數值進行排序(按索引)時,它將同時顛倒字母順序。 doctest的示例為:

sortStudents([('Tim Jones', 'C'), ('Anna Smith', 'B'), ('Barry Thomas', 'A')])

提前致謝。

您需要檢查成績類型 (字符串或整數),以確定應該如何進行排序:

def sortStudents(a):
    return sorted(a, key=lambda x: [-x[1] if isinstance(x[1], int) else x[1]] 
                                   + x[0].split()[::-1])

您也可以將名稱拆分一次,然后反轉列表,而不是拆分兩次。

您可以嘗試:

def sortStudents(a):
    return (sorted(a, key=lambda x: (-int(str(x[1]).replace("A","90").replace("B","80").replace("C","70")), x[0].split()[1], x[0].split()[0])))

這似乎有點愚蠢,但是我認為這可以滿足您的需要。

>>> a = [('Tim Smith', 54), ('Anna Smith', 88), ('Barry Thomas', 88)]
>>> b=[('Tim Jones', 'C'), ('Anna Smith', 'B'), ('Barry Thomas', 'A')]
>>> sortStudents(a)
[('Anna Smith', 88), ('Barry Thomas', 88), ('Tim Smith', 54)]
>>> sortStudents(b)
[('Barry Thomas', 'A'), ('Anna Smith', 'B'), ('Tim Jones', 'C')] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM