2015-07-12 159 views
0

我有一个关于我正在修改的当前程序的问题。 目前的计划,我有:更复杂的排序:如何对数据进行分类并对类别中的数据进行排序? (Python)

def extract_names(filename): 
    names = [] 
    f = open(filename, 'rU') 
    text = f.read() 

    yearmatch = re.search(r'Popularity\sin\s(\d\d\d\d)', text) 
    if not yearmatch: 
    sys.stderr.write('unavailable year\n') 
    sys.exit(1) 
    year = yearmatch.group(1) 
    names.append(year) 

    yeartuples = re.findall(r'<td>(\d+)</td><td>(\w+)</td>\<td>(\w+)</td>', text)#finds all patterns of date, boyname, and girlname, creates tuple) 

    rankednames = {} 
    for rank_tuple in yeartuples: 
    (rank, boyname, girlname) = rank_tuple 
    if boyname not in rankednames: 
     rankednames[boyname] = rank 
    if girlname not in rankednames: 
     rankednames[girlname] = rank 
    sorted_names = sorted(rankednames.keys(), key=lambda x: int(rankednames[x]), reverse = True) 
    for name in sorted_names: 
    names.append(name + " " + rankednames[name]) 
    return names[:20] 
#Boilerplate from this point** 

def main(): 

    args = sys.argv[1:] 

    if not args: 
    print 'usage: [--summaryfile] file [file ...]' 
    sys.exit(1) 

    summary = False 
    if args[0] == '--summaryfile': 
    summary = True 
    del args[0] 

    for filename in args: 
    names = extract_names(filename) 
    text = '\n'.join(names) 

    if summary: 
     outf = open(filename + '.summary', 'w') 
     outf.write(text + '\n') 
     outf.close() 
    else: 
     print text 

if __name__ == '__main__': 
    main() 

方关于某一年的在表中最流行的babynames网站获取信息,利用这些数据创建一个列表,并打印出babynames的列表,以便最低等级(1000)到最高等级(1)。我试图做的修改应该是按字母顺序排列所有的名字(第一个),但是在每个字母组中(所有a的组合,所有b的组等)。我想按降序对名称进行排序在字母组中,所以以a开头的排名最低的名字将是第一个出现的名字。我已经尝试每个字母的re.search,但我不认为它按照预期的方式工作。我在信件分类中排序时遇到了最大的麻烦。有没有其他方法/解决方案?

回答

0

在调用sorted,替换:

key=lambda x: int(rankednames[x]), reverse = True 

有:

key=lambda x: (x[0], -int(rankednames[x])) 

一般的一点是,你总是可以使用一个tuple两个或两个以上不同的排序键与一个使用相结合第一个和另一个作为“决胜盘”。具体的一点是,我们可以很容易地模拟reverse=True,因为密钥碰巧是一个整数,因此可以被否定:这个技巧不适用于字符串键。

+0

所以是“-int(rankingnames [x])”与“reverse = True”一样吗? @SteveJessop – ihk47

+0

那么,'-'与'reverse = True'完全相同,因为对于整数'a

+0

什么是“x [0]”按字母顺序排序?我对Python非常陌生,所以我的理解速度较慢 – ihk47

相关问题