2017-01-04 3 views
-1

の新しいバージョン私は、ファイルの最新バージョンを印刷する必要があります:私は2つのsqljdbc42-4.2.jarsqljdbc42-4.3.jarを持っている上記のリストにPythonのリストファイル

filenames = [ 
'jaks-dataformat-cbor-2.6.6.jar', 
'sqljdbc42-4.2.jar', 
'sqljdbc42-4.3.jar', 
'spark-core_2.10-1.6.2.jar', 
'spark-core_2.10-1.6.4.jar', 
'commons-cli-1.2.jar', 
] 

を。私は4.3を印刷したいだけで、同じくspark-coreのみ6.4を印刷します。私はいくつかのパターンを試みたが、何も動作しない。どんな助けもありがたい。

これは、ファイル名が同じで始まり拡張子が異なる場合に得られるものです。

sorted_files = sorted(filenames, key=lambda x: int(x.split('.')[1])) 
print sorted_files 
私は、私は私自身の練習のための彼のコメントでポール・ルーニーの提案を実装するだろうと思った
+4

あなたのためにコードを記述していただきたいようです。多くのユーザーは、苦労しているコーダーのコードを作成したいと考えていますが、通常、ポスターが既に問題を解決しようとしているときにのみ役立ちます。この努力を実証する良い方法は、これまでに書いたコード、サンプル入力(もしあれば)、期待される出力、実際に得られる出力(出力、トレースバックなど)を含めることです。あなたが提供する詳細があれば、受け取る可能性のある回答が増えます。 [FAQ](http://stackoverflow.com/tour)と[How to Ask](http://stackoverflow.com/questions/how-to-ask)を確認してください。 – TigerhawkT3

+1

'-'で分割しようとしないのはなぜですか? jarの名前とバージョンを区別するのはそういう感じです。私は 'x.rsplit( ' - '、1)'が名前とバージョンを適切に分割すると思います。その後、同じ名前のものをグループ化してバージョンを比較し、どちらが最高かを確認します。 –

答えて

0

、その結果

filenames = [ 
'jaks-dataformat-cbor-2.6.6.jar', 
'sqljdbc42-4.2.jar', 
'sqljdbc42-4.3.jar', 
'spark-core_2.10-1.6.2.jar', 
'spark-core_2.10-1.6.4.jar', 
'commons-cli-1.2.jar', 
] 

from collections import OrderedDict 

latest_versions = list(OrderedDict([fn.rsplit('-', 1) for fn in filenames]).items()) 

new_filenames = [] 

for fn in latest_versions: 
    new_filenames.append(''.join(fn)) 

:おそらく

print new_filenames 
['jaks-dataformat-cbor2.6.6.jar', 'sqljdbc424.3.jar', 'spark-core_2.101.6.4.jar', 'commons-cli1.2.jar'] 

ない最善の解決策が、それを願っていますその間あなたを助けるかもしれません。

関連する問題