2017-07-14 12 views
0

私は3つのネストされたリストを含むリストをソートしようとしています:パス、ファイル名、最終的にファイルの作成時間。だから私はそれらを並べ替えて最新のファイルを取得できるようにしたい。ネストされたリストをソートする

このようにラムダを使用している人がいますが、私はそれらを使用して快適に感じることはできません。

私は最善の方法は、単にリストコンポーネントを切り替えることであるが、これは動作しないと思う:

class FILE: 
    PATH = 0 
    NAME = 1 
    DATE = 2 

mayaFiles = [[],[],[]] 
mayaFiles[FILE.DATE] = [0,56,3,12,7,35,16] 

doSwitch = True 
while (doSwitch): 
    for ma in range(0, len(mayaFiles[FILE.DATE])-1): 
     doSwitch = False 
     doSwitch = mayaFiles[FILE.DATE][ma] > mayaFiles[FILE.DATE][ma+1] 
     hi = mayaFiles[FILE.DATE][ma] 
     lo = mayaFiles[FILE.DATE][ma+1] 
     if doSwitch: 
      mayaFiles[FILE.DATE][ma] = lo 
      mayaFiles[FILE.DATE][ma+1] = hi 
     else: 
      break 

print mayaFiles[FILE.DATE] 

答えて

0

これらのリストは既に並んでいると仮定すると、あなたはそこに別のコーミングにより、より簡単に時間を持っていますソート順に並べられたタプルのリストにリストされます。 collectionsモジュールのnamedtuple構成は、この種のものには最適です。私はあなたのデータをpaths,datesnamesという3つのリストにまとめることができると仮定しています。私はここにいくつかのダミーデータを供給していますので、私が何を想定しているかを見ることができます。

names = "a.ma", "b.ma", "c.ma", "d.ma" 
paths = "c:/test", "c/test", "c:/other", "d:/extra" 
dates = "17-01-01", "16-01-01", "17-02-01", "17-06-30" 

# this creates a namedtuple, which is a 
# mini-class with named fields that otherwise 
# works like a tuple 

from collections import namedtuple 
record = namedtuple("filerecord", "date name path") 

# in real use this should be a list comp 
# but this is easier to read: 

records = []  
for date, name, path in zip(dates, names, paths): 
    records.append(record(date, name, path)) 

records.sort(reverse=True) 
for item in records: 
    print item 

# filerecord(date='17-06-30', name='d.ma', path='d:/extra') 
# filerecord(date='17-02-01', name='c.ma', path='c:/other') 
# filerecord(date='17-01-01', name='a.ma', path='c:/test') 
# filerecord(date='16-01-01', name='b.ma', path='c/test') 

あなたはsort()に 'キー' 引数を使用して、他のフィールドで並べ替えることができます:

records.sort(key=lambda k: k.name) 
for item in records: 
    print item 

# filerecord(date='17-01-01', name='a.ma', path='c:/test') 
# filerecord(date='16-01-01', name='b.ma', path='c/test') 
# filerecord(date='17-02-01', name='c.ma', path='c:/other') 
# filerecord(date='17-06-30', name='d.ma', path='d:/extra') 
関連する問題