gar*_*tor 2 python sorting list
我想对包含(字符串,整数,整数)的元组列表进行排序。这些元组的第一个值可以是任何字符串(例如“$”或“9”等数字字符串)。目标是根据这些元组的第一个元素进行排序,如果比较发生在两个相同的字符串之间,我将根据第二个元素进行排序。我尝试了以下方法,但结果并不成功。解决方案?
array = [('$', 0, 0), ('3', 3, 3), ('7', 5, 6), ('15', 6, 9), ('5', 7, 11), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18), ('16', 11, 20)]
sorted_array = sorted(array, key=lambda x:(x[0], int(x[1])))
print(sorted_array)
Run Code Online (Sandbox Code Playgroud)
输出:
[('$', 0, 0), ('3', 3, 3), ('7', 5, 6), ('15', 6, 9), ('5', 7, 11), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18), ('16', 11, 20)]
Run Code Online (Sandbox Code Playgroud)
我想得到:
[('$', 0, 0), ('3', 3, 3), ('5', 7, 11), ('7', 5, 6), ('15', 6, 9), ('16', 11, 20), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18)]
Run Code Online (Sandbox Code Playgroud)
使用natsort(自然排序),str.isdigit您可以自然地对数字进行排序,同时首先保留非数字。但您可能期望的更普遍的规则尚不清楚。
from natsort import natsorted
array = [('$', 0, 0), ('3', 3, 3), ('7', 5, 6), ('15', 6, 9), ('5', 7, 11), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18), ('16', 11, 20)]
sorted_array = natsorted(array, key=lambda x:(x[0].isdigit(), x))
print(sorted_array)
Run Code Online (Sandbox Code Playgroud)
输出:
[('$', 0, 0), ('3', 3, 3), ('5', 7, 11), ('7', 5, 6), ('15', 6, 9), ('16', 11, 20), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1060 次 |
| 最近记录: |