我有一个数据列表需要排序,但遗憾的是这些对象的命名方案不是非常一致。这个数据是一个字符串列表,其中大多数情况下为实数,但有时在末尾加上字母。以下是此列表中可接受的值的一些示例:
# this is how it should be sorted
['1', '1.1', '1.2', '2', '2.1A', '2.1B', '2.2A', '101.1', '101.2']
由于这些数据存储在数据库中,我的第一个想法是使用以下Django方法返回排序的结果,但它会按以下方式返回。
#took out unneeded code
choices = [l.number for l in Locker.objects.extra(
select={'asnumber': 'CAST(number as BYTEA)'}).order_by('asnumber')]
print choices
==> ['1', '1.1', '101.1', '101.2', '2', '2.1A', '2.1B', '2.2A']
很遗憾,它不能按照正确顺序进行排序。因此,我的新计划是编写一个方法,该方法将与Python的
sorted
方法配合使用,但我仍然不确定如何编写。我需要找到一种方法来按字符串的实数部分排序,然后作为次要排序方式,按附加在末尾的字母排序。有关如何处理此问题的任何建议吗?
A
或B
或更多字符吗? - Erwin Brandstetter