【发布时间】:2022-01-11 04:46:48
【问题描述】:
我想对包含(字符串、整数、整数)的元组列表进行排序。这些元组的第一个值可以是任何字符串(例如 '$',或数字字符串,例如 '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)
输出:
[('$', 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)]
我想得到:
[('$', 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)]
【问题讨论】:
-
字符串比较不能这样工作:stackoverflow.com/a/4806946/13111190 你必须为键定义一个更复杂的函数。
-
你的规则是什么?您可以使用
natsort.natsorted将'7'排序在'15'之前,但这会将$推到最后。 -
我想要一个排序,它根据字符串的字典顺序和数字字符串的数字顺序对字符串进行排序。 @mozway
-
然后检查我的答案,可能是你想要的;)