[英]What is the best way to access the last entered key in a default dict in Python?
我有一个默认的dicts字典,其主键是字符串形式'YYYYMMDD HH:MM:SS'的时间戳。 按顺序输入键。 如何访问最后输入的密钥或具有最新时间戳的密钥?
如果您只需要访问输入的最后一项,请使用collections
模块中的OrderedDict
。 但是,如果需要维护连续排序,则需要完全使用不同的数据结构,或者至少使用辅助数据结构进行索引。
编辑:我想补充一点,如果访问最后一个元素是一个你很少需要做的操作,简单地对dict的键进行排序并选择最大值就足够了。 但是,如果必须经常这样做,反复排序会变得非常昂贵。 根据代码的工作方式,最简单的方法可能是简单地维护一个变量,在任何给定的点,它包含添加的最后一个键和/或添加的最大值(即,随着dict的每个后续添加更新) )。 但是,如果您想要保留超出最后一项的添加记录,并且不需要连续排序,则OrderedDict
是理想的选择。
使用OrderedDict而不是内置的dict
你可以尝试这样的事情:
>>> 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'
但在大型数据集上可能会很慢。
如果您想知道谁输入了最后一个(根据入口时间),请参阅下面的示例:
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.