我正在尝试使用 Python 的内置排序功能对美元金额列表从最低到最高进行排序,但是当我调用它时,它对数字进行排序时非常困惑。它从 10,000 美元开始,然后上升到 19,0000 美元(最高),然后跳到 2,000 美元,表面上从那里开始计数,因为 2 大于 1。我不知道如何纠正这个问题。我使用的代码如下。
numbers=[['$10014.710000000001'], ['$10014.83'],['$11853.300000000001'],
['$19060.010000000006'],['$2159.1099999999997'],['$3411.1400000000003']]
print(sorted(numbers))
请您参考如下方法:
这里的关键见解是列表中的值实际上是字符串,并且字符串是按词法比较的:字符串中的每个字符一次比较一个,直到第一个不匹配的字符。所以“aa”排在“ab”之前,但这也意味着“a1000”排在“a2”之前。如果你想以不同的方式排序,你需要告诉 sort 方法(或 sorted 函数)你想要排序的依据是什么。
在这种情况下,您可能应该使用decimal 模块。您需要 sort 方法的 key 属性。这将对您现有的列表进行排序,仅在排序过程中使用转换后的值。
import decimal
def extract_sortable_value(value):
# value is a list, so take the first element
first_value = value[0]
return decimal.Decimal(first_value.lstrip('$'))
numbers.sort(key=extract_sortable_value)
等价地,你可以这样做:
print(sorted(numbers, key=extract_sortable_value))
