私は並べ替える必要があるデータのリストを持っています。悲しいことに、これらのオブジェクトの命名規則はあまり一貫していません。データは、最も頻繁に実数である文字列のリストですが、最後に文字があることがあります。このリストの許容値のいくつかの例は以下のようなものです:実数と文字の混合リストの並べ替え
# 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
メソッドで動作するメソッドを書くことですが、私はまだこれを書く方法についてはわかりません。私は文字列の実数部分をソートし、その後に2番目のソートとして、最後に付加された文字でソートする方法を見つける必要があります。
これについての相談はどこですか?
数字、ドット、 'A'または' B'以上の文字だけですか? –
あなたは正面を実数のように並べ替えたいと思っていますが、それが本当にバージョン番号の大部分であるかどうかを疑問に思うのは助かりません。 '1.3'を '1.12'の前後にソートしますか? – kgrittn
ああ、あなたは正しい、私は実際の数よりも具体的にしなければなりません。これはマイナーバージョン番号に似ていますが、うまくいけば1.12は存在しませんが、もしあればそれが他のものの前に来るはずです。私は明日チェックインする必要があります。どの答えがうまくいくかを調べる – Bob