【问题标题】:Python sorted() function not working the way it shouldPython sorted() 函数无法正常工作
【发布时间】:2012-02-04 18:28:01
【问题描述】:

基本上我有一个嵌套列表,我试图通过第一个索引进行排序 我复制了 python howto 说的方法,但它似乎不起作用,我不明白为什么:

来自网站的代码:

>>> student_tuples = [
    ('john', 'A', 15),
    ('jane', 'B', 12),
    ('dave', 'B', 10),
    ]
>>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

我的代码:

def print_scores(self):
    try:
        #opening txt and reading data then breaking data into list separated by "-"
        f = open(appdata + "scores.txt", "r")
        fo = f.read()
        f.close()
        userlist = fo.split('\n')
        sheet_list = []
        for user in userlist:
            sheet = user.split('-')
            if len(sheet) != 2:
                continue
            sheet_list.append(sheet)
        sorted(sheet_list, key = lambda ele : ele[1]) #HERE IS THE COPIED PART!
        if len(sheet_list) > 20: # only top 20 scores are printed
            sheet_list = sheet_list[len(sheet_list) - 21 :len(sheet_list) - 1]
       #prints scores in a nice table
        print "name          score"
        for user in sheet_list:
            try:
                name = user[0]
                score = user[1]
                size = len(name)
                for x in range(0,14):
                    if x > size - 1:
                        sys.stdout.write(" ")
                    else:
                        sys.stdout.write(name[x])
                sys.stdout.write(score + "\n")
            except:
                print ""


    except:
         print "no scores to be displayed!"

错误是生成的打印列表与 txt 中的完全一样,就好像排序函数没有做任何事情一样!

例子:

txt 文件中的数据:

Jerry-1284
Tom-264
Barry-205
omgwtfbbqhaxomgsss-209
Giraffe-1227

打印的内容:

Name          Score
Jerry         1284
Tom           264
Barry         205
omgstfbbqhaxom209
Giraffe       1227

【问题讨论】:

  • @Brian Roach 太棒了!
  • @aitchnyu - Jeff Atwood 是 Stackoverflow 的联合创始人。这些年来,他发表了一些很棒的博客文章。这是我的最爱之一。
  • @Brian Roach 是的,我看到他和 Joel Splosky 的帖子被引用了很多

标签: python list lambda nested sorted


【解决方案1】:

sorted 返回一个新列表。如果要修改现有列表,请使用

sheet_list.sort(key = lambda ele : ele[1])

【讨论】:

  • 仍然不能完全正常工作,现在的名单是 Giraffe、Jerry、Barry、omgw 和 tom。应该是杰瑞、长颈鹿、汤姆、天哪、巴里。
  • @joseph:工作表条目是字符串。它是“按字母顺序”排序的,而不是按数字的值。试试 key=lambda ele: float(ele[1]),或者事先将它们转换为数字。
猜你喜欢
  • 2018-08-07
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多