我试图对包含3个嵌套列表的列表进行排序:路径,文件名和最后的文件创建时间。所以我想对它们进行排序以便能够获取最新的文件。
所以我看过人们一直在使用lambda,但是我觉得使用它们并不舒服,并且不知道如何使用lambda进行排序。
我认为最好的方法就是切换列表组件,但这不起作用:
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 :(得分:0)
假设这些列表已经对齐,您可以通过将单独的列表组合到按排序顺序排列的元组列表中来更轻松地完成这些操作。 radio button
模块中的namedtuple
构造对于此类事物非常有用。我假设您可以将数据分为三个列表:collections
,paths
和dates
。我在这里提供一些虚拟数据,这样你就可以看到我正在假设的内容。
names
您可以使用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')
的'key'参数对其他字段进行排序:
sort()