【问题标题】:How to sort a list of tuple by second then by first? [duplicate]如何按第二个然后按第一个对元组列表进行排序? [复制]
【发布时间】:2019-09-02 09:52:06
【问题描述】:

我正在寻找从第二个项目开始然后按第一个项目的元组列表。这不是来自Sort tuple by first then second then third 的重复,因为这篇文章是关于第一个然后第二个而不是第二个然后第一个。

来自 C# 背景,我会找到很多类似 OrderBy+ThenBy 的东西。

我可以自己编写并发布它。 Python 是包含电池的,我相信有更好的方法来实现这一点。

mcve 带有单元测试:

def sort_tuples_by_second(inputs):
    return sorted(inputs, key=lambda item: item[1])

class TestStringMethods(unittest.TestCase):

    # both passed
    def test_sort_tuples_by_second(self):
        tuples = [(1, 1), (1, 2), (1, 0), (0, 9)]
        actuals = sort_tuples_by_second(tuples)
        self.assertEqual(actuals, [(1, 0), (1, 1), (1, 2), (0, 9)])
        letters = [("a", "a"), ("b", "c"), ("c", "b"), ("a", "z")]
        actuals = sort_tuples_by_second(letters)
        self.assertEqual(actuals, [("a", "a"), ("c", "b"), ("b", "c"), ("a", "z")])

    # both failed
    def test_sort_tuples_by_second_then_by_first(self):
        tuples = [(1, 1), (4, 1), (3, 1), (1, 9), (0, 9)]
        actuals = sort_tuples_by_second(tuples)
       	self.assertEqual(actuals, [(1, 1), (3, 1), (4, 1), (0, 9), (1, 9)])
        letters = [("b", "a"), ("a", "a")]
        actuals = sort_tuples_by_second(letters)
        self.assertEqual(actuals, [("a", "a"), ("b", "a")])

Try it online!

【问题讨论】:

    标签: python


    【解决方案1】:

    您正在寻找一种内置方式,有两种!您可以通过查看 python dev 如何对其他数据结构进行排序来找到它们。例如,sort a list of dicts by x then by y 上有一些提示。在这种情况下,它们会按键排序:

    list.sort(key=lambda item: (item['points'], item['time']))
    

    Try it online!

    或者在你的情况下使用元组:

    sorted(inputs, key=lambda item: (item[1], item[0]))
    

    Python 的 HowTo 提供了一个替代方案:

    from operator import itemgetter
    
    sorted(inputs, key=itemgetter(1, 0))
    

    Try it online!

    【讨论】:

    • 你问了,你回答了为什么??
    • @Amy 因为我在网上找不到答案。在写问题时,我解决了我的问题。现在,我发布它以帮助其他人。阅读 Stack Overflow 创始人之一的It’s OK to Ask and Answer Your Own Questions
    • 干得好,继续努力,感谢您的回答
    • 其实,同一个话题已经有很多问题了,这可能更接近这个问题:stackoverflow.com/questions/5212870/…
    • @musicamante 我以前没有找到它。我很高兴它存在。我发现我的问题还没有发布很奇怪。感谢您找到它!
    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 2012-03-08
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2012-03-13
    相关资源
    最近更新 更多