![](/img/trans.png)
[英]I can't use the sorted function to sort a two elements tuple list in descending numerical order then in ascending alphabetical order in case of a tie
[英]how to sort the elements in a list in numerical order and not alphabetical
我有一個列表,其中包含帶有數字的句子,我想按數字而不是字母順序排序。 但是當我使用排序 function 時,它按字母而不是數字對元素進行排序,我該如何解決這個問題?
num = ['ryan has 8 apples','charles has 16 bananas','mylah has 3 watermelons']
num.sort()
print(num)
output:
['charles.....','mylah.....','ryan......']
如您所見,它按字母順序排序,但這不是我預期的 output
點代表句子的 rest
expected result:
['mylah has 3 watermelons','ryan has 8 apples','charles has 16 bananas']
這是預期的 output ,其中元素按數字而非字母順序排序
將列表以dict的形式放入,key為從字符串中提取的數值,value為字符串?
然后,您可以根據鍵對字典進行排序嗎?
您需要傳入一個鍵來對它們進行排序,該鍵將字符串拆分並將數字解析為要排序的數字,如果您希望具有相同數字的那些,您也可以按字母順序排序。
sorted(num, key=lambda x: (int(x.split()[2]), x))
或者
num.sort(key=lambda x: (int(x.split()[2]), x))
您需要使用key=
讓sort
知道您要為每個元素分配哪個值進行排序。
如果字符串始終是結構化的,您可以使用:
num = ['ryan has 8 apples','charles has 16 bananas','mylah has 3 watermelons']
num.sort(key=lambda x: int(x.split(' ')[2]))
print(num)
如果它們更復雜,請查看正則表達式。
到目前為止,解決方案專注於特定於字符串結構的解決方案,但會因字符串結構略有不同而失敗。 如果我們只提取字符串的數字部分,然后轉換為int
,我們將得到一個可以傳遞給排序函數的 key 參數的值:
num.sort(
key=lambda s: int(''.join(c for c in s if c.isdigit()))
)
key 參數允許您指定要排序的數據的某些替代方面,在這種情況下,由 lambda function 提供的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.