我有一本字典,如下所示。
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'
}
现在我想按时间优先的键对其进行排序。
我有一本字典,如下所示。
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'
}
现在我想按时间优先的键对其进行排序。
字典没有排序,如果你想打印出来或者按排序的顺序遍历它,你应该先把它转换成一个列表:
例如:
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'] 语法。
将 'key' 参数传递给 sorted 告诉 python 如何比较列表中的项目,标准字符串比较无法按时间排序。
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))
如果您真的想在输出中保留当前格式,可以将其用作key
for :sorted
for k in sorted(d, key=padded):