【问题标题】:Python: Sorting tuple strings alphabeticallyPython:按字母顺序对元组字符串进行排序
【发布时间】:2014-11-20 19:43:07
【问题描述】:

我想在元组中的函数中按字母顺序对成绩进行排序,例如:

sortGrades([('John Smith', 'C'), ('Adam Thomas', 'B'), ('Katie Johnson', 'A')])

还有,在数字上,像这样:

sortGrades([('John Smith', 54), ('Adam Smith', 54), ('Thomas King', 88)]) 

所以它会按照最高分和最高等级对元组进行排序。如果有两个得分相同的人,名字也应该按字母顺序排序。

到目前为止,我的函数如下所示:

def sortGrades(list):
return sorted(list, key=lambda x:(-x[1],x[0]))

但是,当我对等级(A,B,C)进行排序时,这似乎不起作用,它返回“TypeError:一元操作数类型错误 -:'str'”

知道如何让它同时适用于字符串和整数吗?

  • 已编辑问题,需要它同时适用于字符串和整数!

【问题讨论】:

  • “如何使它适用于字符串”或“如何使它适用于字符串和整数”?
  • 字符串和整数。我的错,对不起!我只需要一个函数就可以完成所有工作。
  • 必须sortGrades() 在没有任何迹象的情况下运行,以指示期望哪种类型的列表?
  • 如果可能的话,是的。我不知道如何让它同时为两者工作,我宁愿没有两个单独的功能

标签: python sorting


【解决方案1】:

以与您写的类似的方式,我会这样做:

return sorted(list, key=lambda x:(tuple(-ord(c) for c in x[1]), x[0]))

这基本上否定了字符串中的所有字符,因此您仍然可以按字典顺序排序。

当然,由于您的案例只有单字符串,因此调用 ord 一次即可。

如果你想让它同时使用字符串和整数,那么这是一个坏主意。你如何比较'A'54?最好有两个版本的函数。

【讨论】:

    【解决方案2】:

    如果你所有的成绩都是单个大写字母,你可以使用key=lambda x: (-ord(x[1]), x[0]))(按字符的ASCII值排序)。

    【讨论】:

      【解决方案3】:

      试试这个,比较包含 alpha 成绩的列表或包含数字成绩的列表是令人满意的。

      def sortedGrades(some_contents):
         def as_numeric(x): return (-x[1],x[0])
         def as_alpha(x): return (-ord(x[1]), x[0])
      
         sort_keys = { type(0): as_numeric,
           type('A'): as_alpha,
         }
         if not some_contents:
            return some_contents
         sort_key = sort_keys[type(some_contents[0][1])]
         return sorted(some_contents, key=sort_key)
      

      【讨论】:

        【解决方案4】:

        一种选择是制作一个将注释转换为整数并从该字典中选择值的字典:

        a = [('John Smith', 'B'), ('Adam Thomas', 'A'), ('Katie Johnson', 'C')]
        b = [('John Smith', 54), ('Adam Smith', 54), ('Thomas King', 88)]
        
        def sort_grades(lst):
            notes = {'C':1, 'B':2, 'A':3}
            return sorted(lst, key=lambda (x, y): (notes.get(y, y), x))
        
        print sort_grades(a)
        print sort_grades(b)
        

        get(y, y) 基本上意味着“如果 dicy[y] 存在,则返回它,否则返回 y 本身”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-21
          • 1970-01-01
          相关资源
          最近更新 更多