2017-03-19 1 views
2

私はモジュールとバージョンの名前であるリストを持っています。私はバージョン別にソートする必要があります。さて、バージョンだけのリストをソートするのはかなり簡単です。多次元リストのバージョンをソートするpython

strVers.sort(キー= LooseVersion)

しかし、私は2次元のリストを持っている場合は何? すなわち

['app1', '1.0.0'] 
['app1', '1.0.1'] 
['app2', '1.0'] 
['app2', '1.1'] 

など

私はどのように同じことを行うと、両方の列の並べ替えがありますか? 2次元配列をソートすることも問題ありません。ソートされていますが、LooseVersionを使う必要がありますか?

ありがとうございました

+0

どの型のオブジェクト 'app1'、' app2'、...とどのようにあなたがそれらをソートすることを期待しますでしょうか?あなたは最初にアプリケーションでソートしたいのですか? – timgeb

+0

それはリストであり、はい、私はアプリで、次にバージョンで必要です。 – DaLanik

+0

私はあなたがリストを持っていることを知っています。私は 'appX'のデータ型が必要です。これらの文字列か何(あなたのバージョン番号も同じです)ですか? – timgeb

答えて

-1

私はこの問題を理解していません。ソート済み(keyまたはcmp)では、ユーザ定義のソート関数を定義することができます。

「1.0」が最後の要素でなければならない場合は、リストの2番目の要素は、[1]と、または例えば、位置変数[var_name, var_ver]

でアクセス:

strVers = [ 
["app1", "1.0.0"], 
["app1", "1.0.1"], 
["app2", "1.0"], 
["app2", "1.1"] 
] 

for (n, v) in sorted (strVers, key = lambda (sn, sv) : (sv == "1.0", sn)) : 
    print n, v 

対応する出力:

app1 1.0.0 
app1 1.0.1 
app2 1.1 
app2 1.0 

説明ソート基準 : ソート基準(True/False、最初の列の値)のタプルを返します。 (sv == "1.0")は、 "1.0"の場合のみTrueと評価されます。 TrueはFalseの後にソートされるため、「1.0」が最後の項目になります。 同じ値(False)を持つすべてのエントリは、次の(= 2番目の)タプルの項目 に基づいてソートされます。この場合は、最初の列の値です。

+0

悪い例では、1.0.1だけでなく、2.4.4や4.5.7aや3.2b1などを持つこともできます。そのため、私はLooseVersionを使用しなければならないと言っています – DaLanik

+0

この例では、これはあなたの悪い質問の結果です(さらに多くの情報を求めている多くの質問も参照してください)。この例は自己完結型であり、動作し、説明があります。 –

0

のPython 2:

yourlist.sort(key=lambda (name, version): (name, LooseVersion(version))) 

Pythonの3

yourlist.sort(key=lambda name_version: (name_version[0], LooseVersion(name_version[1]))) 
+0

Thanx、これはシンプルに見え、LooseVersionを使用して試してみましょう! – DaLanik

関連する問題