如何对字符串和整数值,具有字母顺序和“反向”-字母顺序的多个属性的数组进行排序

睡觉

我有一个包含[name, surname, int1, int2]元素的数组,我需要按以下顺序对其进行排序:

  • 通过int1(减少)。

  • 如果int1相同,name则按“反向”字母顺序排序。

  • 如果name相同,surname则按字母顺序排序。

所以我有这个:

print(sorted(a, key = lambda x: [-int(x[2]), x[0], x[1]]))

而且我不知道如何x[0]按字母倒序排序-x[0], x[0][::-1]对我不起作用。

例:

[('Petia', 'Anja', 3, 0),
 ('Vasia', 'Katia', 3, 0),
 ('Petia', 'Katia', 3, 0),
 ('Kolia', 'Alexey', 10, 0),
 ('Yana', 'Anja', 10, 0)]

[('Yana', 'Anja', 10, 0),
 ('Kolia', 'Alexey', 10, 0),
 ('Vasia', 'Katia', 3, 0),
 ('Petia', 'Anja', 3, 0),
 ('Petia', 'Katia', 3, 0)]
塞弗特

您可以创建一个带有实现的类<(这<是CPython所sorted要求的-如果您正在使用其他Python实现,则可能需要其他比较运算符)。这样就可以完全控制“排序”。例如:

class Sorter(object):
    def __init__(self, tup):
        self.name, self.surname, self.int1, self.int2 = tup
    def __lt__(self, other):
        # Just to make the logic clearer, in practise you could do nest the ifs
        # to avoid computing self.int1 == other.int1 twice
        if self.int1 == other.int1 and self.name == other.name:
            return self.surname < other.surname
        elif self.int1 == other.int1:
            return self.name > other.name
        else:
            return self.int1 > other.int1

然后用它作为keysorted

>>> sorted(a, key=Sorter)
[('Yana', 'Anja', 10, 0),
 ('Kolia', 'Alexey', 10, 0),
 ('Vasia', 'Katia', 3, 0),
 ('Petia', 'Anja', 3, 0),
 ('Petia', 'Katia', 3, 0)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

按字母顺序,数字顺序和特殊字符对字符串数组进行排序

如何根据名称和查询字符串按字母顺序对对象数组进行排序?

Python:如何按字母顺序对字符串中的字母进行排序,以区分大写和小写

按字母顺序对C字符串数组进行排序

如何按字符串长度和字母顺序排序?

尝试使用冒泡排序按字母顺序对字符串数组进行排序,但排序返回数组的反向

按字母顺序对多个列表进行排序

按字母顺序对结构数组进行排序

Python 2-按照字符串的长度和字母顺序对字符串进行排序

如何按字母顺序对字符串的ArrayList进行排序?

如何按字母顺序对字符串进行排序

Javascript按日期和字母顺序对数组进行排序

如何按字母顺序对字符串数组进行排序并防止c中的突变

如何按字母顺序对记录名称为:字符串字段的记录数组进行排序?

如何使用角度orderBy过滤器按字母顺序对字符串数组进行排序?

如何在Java中按字母顺序对字符串数组进行排序?

如何使用基于域的列表按字母顺序对字符串数组进行排序

基数按长度和字母顺序对字符串排序

使用与原始数组中相同的顺序绘制具有字符串数组的x轴,而不是在matplotlib中按字母顺序对其进行排序

使用Perl对具有特定字母顺序的字符串进行排序

在数组的一个属性上按字母顺序对数组中的对象进行排序

在C中按字母顺序对字符串和结构进行排序

如何按字母顺序对由逗号分隔的字符串进行排序,并按成员的姓氏按字母顺序进行排序?

在字符串中按字母顺序对字符进行排序

连接多个(最多24个)字段,按字母顺序对结果字符串进行排序

如果列同时具有字符串和整数值,如何按HQL对列进行排序

使用指针按字母顺序对字符串数组进行排序

使用指针数组按字母顺序对字符串进行排序

按字母顺序对字符串数组进行排序 C++