Python按元组的第一个值对元组列表进行排序,但特殊ca除外

2024-05-29 01:45:28 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,我有一个元组列表,看起来像:

[(5, "dummmy_string1"), (6, "dummy_string2"), (3, "special_string")]

我想按元组第一个值的升序排序,除了字符串等于special_string的情况。我希望special_string排序到最后,而不管元组中的整数值是多少。在

我现在有一个似乎不起作用的东西:

sorted(li, key=lambda x: (x.string_value == "special_string", x.int_value))

我可以很容易地找到所有具有special_string的元组,从列表中删除它们,对列表进行排序,然后将它们追加到末尾,但要寻找一个更干净的解决方案。在

编辑:

我犯了一个愚蠢的错误,意识到我的解决方案确实有效……=)


Tags: 字符串列表string排序value情况整数解决方案
3条回答

因为排序是稳定的,所以你只需对列表进行两次排序。第一把钥匙一次,特殊情况下第二次

In [2]: li = [(5, "dummmy_string1"), (6, "dummy_string2"), (3, "special_string")]

In [3]: sorted(li, key = lambda x : x[0])
Out[3]: [(3, 'special_string'), (5, 'dummmy_string1'), (6, 'dummy_string2')]

In [4]: sorted(li, key = lambda x : x[1] == "special_string")
Out[4]: [(5, 'dummmy_string1'), (6, 'dummy_string2'), (3, 'special_string')]
li = [(5, "dummmy_string1"), (6, "dummy_string2"), (3, "special_string")]
print sorted(li,key=lambda x:(x[-1]=="special_string",)+x)

应该工作得很好。。。不知道你x.string_value是什么(除了AttributeError

如果有几个special_string,它将按照与其他字符串相同的顺序对它们进行排序(即标准的Left2Right元组排序)

问题中公布的解决方案确实有效:

sorted(li, key=lambda x: (x.string_value == "special_string", x.int_value))

相关问题 更多 >

    热门问题