嘿,我有一个元组列表,看起来像:
[(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
的元组,从列表中删除它们,对列表进行排序,然后将它们追加到末尾,但要寻找一个更干净的解决方案。在
编辑:
我犯了一个愚蠢的错误,意识到我的解决方案确实有效……=)
因为排序是稳定的,所以你只需对列表进行两次排序。第一把钥匙一次,特殊情况下第二次
应该工作得很好。。。不知道你
x.string_value
是什么(除了AttributeError
)如果有几个
special_string
,它将按照与其他字符串相同的顺序对它们进行排序(即标准的Left2Right元组排序)问题中公布的解决方案确实有效:
sorted(li, key=lambda x: (x.string_value == "special_string", x.int_value))
相关问题 更多 >
编程相关推荐