我有一個我必須排序的數據列表,可悲的是這些對象的命名方案並不一致。數據是最常見實數的字符串列表,但有時末尾會有字母。在此列表中可接受值的一些例子是這樣的:用字母混合的實數排序列表
# 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'或更多的字符? – 2012-04-25 00:33:00
你說你想讓前臺像真正的號碼一樣排序,但我不禁想知道它是否更像是版本號的主要部分和次要部分。你想要'1.3'在'1.12'之前還是之後排序。 – kgrittn 2012-04-25 02:13:33
啊你是對的,我應該比「真實」的數字更具體。它更像是一個小版本號,但希望永遠不會有1.12,但如果有的話應該先到另一個。我將不得不在明天檢查以查看哪個答案效果最好 – Bob 2012-04-25 04:36:25