【问题标题】:Sort list of month name strings in ascending order按升序对月份名称字符串列表进行排序
【发布时间】:2020-06-22 18:15:20
【问题描述】:

有人可以指导如何对月份列表进行排序吗?

INPUT = ['August', 'September', 'October', 'November', 'December', 'January']

OUTPUT= ['January','August', 'September', 'October', 'November', 'December']

【问题讨论】:

  • 您可以在此处使用第二个答案中的方法Sort a list of dates by months
  • @MT756,实际上您共享的链接中接受的答案是最好的方法。他们只需要不同的格式代码。
  • @buran,你可以使用 %B 作为格式

标签: python python-3.x list sorting date


【解决方案1】:

calendar.month_name 是一个可以按正确顺序转换为月份列表的对象。假设您的输入字符串格式正确,您可以按此列表中每个字符串的索引进行排序:

>>> from calendar import month_name
>>> month_lookup = list(month_name)
>>> months = ['August', 'September', 'October', 'November', 'December', 'January']
>>> sorted(months, key=month_lookup.index)
['January', 'August', 'September', 'October', 'November', 'December']

您还可以使用datetime.strptime 和匹配完整月份名称的"%B" 格式字符串。

>>> from datetime import datetime
>>> months = ['August', 'September', 'October', 'November', 'December', 'January']
>>> sorted(months, key=lambda m: datetime.strptime(m, "%B"))
['January', 'August', 'September', 'October', 'November', 'December']

请注意,这两种解决方案都会在包含无效月份字符串的列表上引发ValueError。日期时间版本给出了更清晰的信息。

【讨论】:

    【解决方案2】:

    您可以使用此代码获得月份:

    import datetime
    months_dict = {}
    for i in range(1,13):
        months_dict[datetime.date(2020, i, 1).strftime('%B').lower()] = i
    print(months_dict)
    # {'january': 0, 'february': 1, 'march': 2, 'april': 3, 'may': 4, 'june': 5, 'july': 6, 'august': 7, 'september': 8, 'october': 9, 'november': 10, 'december': 11}
    

    然后您可以使用sorted 函数对列表进行排序:

    months = ['August', 'September', 'October', 'November', 'December', 'January']
    print(sorted(months, key=lambda x: months_dict[x.lower()]))
    # ['January', 'August', 'September', 'October', 'November', 'December']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2018-06-11
      相关资源
      最近更新 更多