gpt4 book ai didi

python - 按月python对元组列表进行排序

转载 作者:行者123 更新时间:2023-11-28 20:33:53 24 4
gpt4 key购买 nike

我有一个元组假期列表:

holidays = [('Easter', ('Apr', 1), 0),
('Earth Day', ('Apr', 22), 0),
('Pearl Harbor Rememberance Day', ('Dec', 7), 0),
('Christmas Day', ('Dec', 25), 50),
('Groundhog Day', ('Feb', 2), 0)]

以及对它们进行排序的函数:

def holiday1(holidays : [(str,(str,int),int)]) -> [(str,(str,int),int)]:
return sorted(holidays, key=lambda x:x[1])

我按字母顺序按月对它们进行了排序,但我想按月份的位置对它们进行排序。 (例如,一月 = 1、二月 = 2 等)

我已经为几个月创建了一个字典:

months = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}

我不确定如何使用 dict 'months' 对元组列表进行排序,以便结果是:

holidays = [('Groundhog Day', ('Feb', 2), 0),
('Easter', ('Apr', 1), 0),
('Earth Day', ('Apr', 22), 0),
('Pearl Harbor Rememberance Day', ('Dec', 7), 0),
('Christmas Day', ('Dec', 25), 50)]

最佳答案

我们排序的元素是三元组,其中第二个元素也是一个元组。我们对月份感兴趣,它是元组的 second 元素的 first 元素,因此我们可以使用 x[1][0] 访问它。但当然我们不想按字母顺序排序,而是按月份顺序排序,因此我们可以使用 months[x[1][0]] 执行查找。所以我们可以只考虑 月份 对它进行排序:

# only taking month into account
return sorted(holidays, key=lambda x: months[x[1][0]])

但我的猜测是,如果出现平局,您需要考虑这一天。元组的好处是,如果你比较它们,Python 将首先包含两个元组的第一个元素。在平局的情况下,它将比较两个元组的第二个元素,等等。我们可以通过让 key 返回一个二元组来使用它:首先是月份的索引,然后是日期:

# taking month and day into account
return sorted(holidays, key=lambda x: (months[x[1][0]], x[1][1]))

编辑:如果您希望在月份和日期都相等的情况下按名称对假期进行排序,我们可以构造三元组:

# taking month, day and name into account
return sorted(holidays, key=lambda x: (months[x[1][0]], x[1][1], x[0]))

关于python - 按月python对元组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49783162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com