![](/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.