我有一个默认的dicts字典,其主键是字符串形式'YYYYMMDD HH:MM:SS'的时间戳。按顺序输入键。如何访问最后输入的密钥或具有最新时间戳的密钥?
答案 0 :(得分:7)
如果您只需要访问输入的最后一项,请使用OrderedDict
模块中的collections
。但是,如果您需要维护连续排序,则需要完全使用不同的数据结构,或者至少使用辅助数据结构进行索引。
编辑:我想补充一点,如果访问最后一个元素是一个很少需要做的操作,只需对dict的键进行排序并选择最大值就足够了。但是,如果必须经常这样做,反复排序会变得非常昂贵。根据代码的工作方式,最简单的方法可能是简单地维护一个变量,在任何给定的点,它包含添加的最后一个键和/或添加的最大值(即,随着dict的每个后续添加更新) )。但是,如果您想保留超出最后一项的添加记录,并且不需要连续排序,则OrderedDict
是理想的。
答案 1 :(得分:1)
使用OrderedDict而不是内置字典
答案 2 :(得分:0)
您可以尝试这样的事情:
>>> import time
>>> data ={'20120627 21:20:23':'first','20120627 21:20:40':'last'}
>>> latest = lambda d: time.strftime('%Y%m%d %H:%M:%S',max(map(lambda x: time.strptime(x,'%Y%m%d %H:%M:%S'),d.keys())))
>>> data[latest(data)]
'last'
但在大型数据集上可能会很慢。
答案 3 :(得分:0)
如果您想知道谁输入了最后一个(根据入学时间),请参阅以下示例:
import datetime
format='%Y%m%d %H:%M'
Dict={'20010203 12:00':'Dave',
'20000504 03:00':'Pete',
'20020825 23:00':'kathy',
'20030102 01:00':'Ray'}
myDict={}
for key,val in Dict.iteritems():
TIME= str(datetime.datetime.strptime(key,format))
myDict[TIME]= val
myDict=sorted(myDict.iteritems(), key=lambda (TIME,v): (TIME))
print myDict[-1]