0

我有一个脚本,可以在一系列子目录中创建所有 pdf 的目录列表。输出是元组,其中包括保存为字符串的文件的年份以及生成报告的单元的 ID,如下所示:

unit1, 2010
unit2, 2002
unit2, 2005
unit2, 2010 
unit3, 2003 

我现在要做的是创建一个报告,该报告根据第二项中包含最大值的元组查找最新报告。通常,我会在 Access 中使用 MAX 查询执行此操作,但是,我试图从那以后消除该步骤并一次编写所有提取。使用我的原始代码,我的输出将包括以下内容:

unit1, '2010'
unit2, '2010'
unit3, '2003'

我环顾四周,意识到我需要更改我的脚本,以便它生成一个匹配每个唯一 ID 的元组列表。使用我从将元组列表拆分为同一元组字段的子列表中找到的出色答案,我能够将结果拆分为一组子列表。这意味着我的输出现在如下:

[[(unit1, '2010')],[(unit12, '2010'), (unit2, '2010'), (unit2, '2005'), (unit2, '2002')],[(unit3, '2003']]

我现在的困难是尝试从每个包含最高值项目的子列表中提取元组。我尝试了以下方法:

import glob, os, itertools, operator  
dirtup = []
for f in glob.glob('P:\Office*\Technical*\Bureau*\T*\*\YR2*\R*\*\*.pdf'):
    fpath, fname = os.path.split(f)
    fyr = fpath[91:95]
    vcs = 'Volume'
    rname, extname = os.path.splitext(fname)
    rcid = fname[0:7]
    dirtup.append ((f, fyr, rcid, vcs))

dirtup2 = sorted(dirtup, key=operator.itemgetter(2))

for key, group in itertools.groupby(dirtup2, operator.itemgetter(2)):
    maxval = max(x[1] for x in dirtup2)

print [x for x in dirtup2 if x[1] == maxval] 

这仅返回匹配 fyr 最大值的元组,而不是每个子列表的 fyr 最大值。

编辑

使用 mglison 的第一个答案,我能够获得输出(包含具有最大值的第二项的元组)。

4

1 回答 1

1

您可以根据特定字段对每个子列表进行排序,并获取已排序子列表的第一个元素。

for key,group in itertools.groupby(dirtup2,operator.itemgetter(2)):
    newlist=sorted(group,key=operator.itemgetter(1),reverse=True)
    tuple_with_max=newlist[0]
    print tuple_with_max
于 2012-07-18T15:39:19.123 回答