【问题标题】:Sort week day texts对工作日文本进行排序
【发布时间】:2012-12-12 16:27:48
【问题描述】:

我有列表["Tue", "Wed", "Mon", "Thu", "Fri"] 作为列表,我想将其设为 ["Mon", "Tue", "Wed", "Thu", "Fri"].

如何排序?

【问题讨论】:

  • 您需要为每个值附加一个序号(即 [1,2,3,4,5]),因为字母排序不起作用。我认为这是一个人为的例子,因为实际上,您可以创建一个具有预期顺序的列表。
  • @skp:我的也只是一个人为的例子。关键是,您必须为订购添加其他信息。

标签: python sorting datetime python-2.7


【解决方案1】:

效率不高,但如果你有一个他们应该在的顺序列表......

>>> m = ["Mon", "Tue", "Wed", "Thu", "Fri"]
>>> n = ["Tue", "Wed", "Mon", "Thu", "Fri", "Tue", "Mon", "Fri"]
>>> sorted(n, key=m.index)
['Mon', 'Mon', 'Tue', 'Tue', 'Wed', 'Thu', 'Fri', 'Fri']

注意,如果n 中存在某个值,而m 中不存在某个值,这将引发异常。

或者将它们放入以名称为键、顺序为值的字典中,然后使用key=your_dict.get 作为键...类似于:

>>> d = {name:val for val, name in enumerate(m)}
>>> d
{'Fri': 4, 'Thu': 3, 'Wed': 2, 'Mon': 0, 'Tue': 1}
>>> sorted(n, key=d.get)
['Mon', 'Mon', 'Tue', 'Tue', 'Wed', 'Thu', 'Fri', 'Fri']

这不会引发异常(Py3.x 除外,在尝试排序 None 时会出现错误),但您可以使用 partial to sensible、sort before or after default 或 get list.index 的等效行为,使用 key=d.__getitem__ 或类似的

【讨论】:

    【解决方案2】:

    查找并用 1 替换 monday 的所有实例,用 2 替换 tuesday 等排序、重新分配。

    【讨论】:

      【解决方案3】:

      http://wiki.python.org/moin/HowTo/Sorting/

      您正在寻找一种词法排序。编写自己的函数也很有趣,作为学习事项;)

      编辑:好的,你只需要一个函数,它在一天内返回它的星期几。您可以在函数中简单地使用日期字符串数组,然后使用天数周数对元素进行排序,就像老板一样。

      【讨论】:

      • 我在您的链接中没有看到词法排序。您可能指的是 Decorate-Sort-Undecorate?
      • 词法排序在您的情况下不起作用。根据您的示例,如果您对此进行词汇排序,您将得到 ["Mon", "Fri", "Thu", "Tue", "Wed"]
      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 2016-09-18
      • 2011-10-30
      • 2019-04-10
      • 2011-10-15
      相关资源
      最近更新 更多