【问题标题】:python dictionary sorted based on time基于时间排序的python字典
【发布时间】:2014-02-22 11:25:16
【问题描述】:

我有一本字典,如下所示。

d = {
    '0:0:7': '19734',
    '0:0:0': '4278',
    '0:0:21': '19959',
    '0:0:14': '9445',
    '0:0:28': '14205',
    '0:0:35': '3254'
}

现在我想按时间优先的键对其进行排序。

【问题讨论】:

    标签: python python-3.x sorting dictionary ordereddictionary


    【解决方案1】:

    字典没有排序,如果你想打印出来或者按排序的顺序遍历它,你应该先把它转换成一个列表:

    例如:

    sorted_dict = sorted(d.items(), key=parseTime)
    #or
    for t in sorted(d, key=parseTime):
        pass
    
    def parseTime(s):
        return tuple(int(x) for x in s.split(':'))
    

    请注意,这意味着您不能对 sorted_dict 使用 d['0:0:7'] 语法。

    向 sorted 传递一个 'key' 参数告诉 python 如何比较列表中的项目,标准字符串比较无法按时间排序。

    【讨论】:

      【解决方案2】:

      python 中的字典不保证顺序。有collections.OrderedDict,它保留了插入顺序,但如果你想按顺序处理标准字典的键,你可以这样做:

      for k in sorted(d):
      

      在您的情况下,问题在于您的时间字符串无法正确排序。您需要包括使它们这样做所需的额外零,例如"00:00:07",或将它们解释为实际的 time 对象,这将正确排序。这个函数可能有用:

      def padded(s, c=":"):
          return c.join("{0:02d}".format(int(i)) for i in s.split(c))
      

      如果您确实想在输出中保留当前格式,可以将其用作keysorted

      for k in sorted(d, key=padded):
      

      【讨论】:

        【解决方案3】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-05
          • 1970-01-01
          • 2016-02-26
          • 2021-08-09
          • 2021-10-11
          • 2023-01-01
          • 2021-06-25
          • 2013-05-01
          相关资源
          最近更新 更多