我有一个默认的字典,其主键是字符串形式的时间戳 'YYYYMMDD HH:MM:SS'。键是按顺序输入的。如何访问最后输入的密钥或具有最新时间戳的密钥?
问问题
178 次
4 回答
7
如果您只需要访问最后输入的项目,请使用模块OrderedDict
中的 an 。collections
但是,如果您需要保持连续排序,则需要完全使用不同的数据结构,或者至少使用一种辅助数据结构来进行索引。
编辑:我要补充一点,如果访问最后一个元素是您很少要做的操作,那么简单地对字典的键进行排序并选择最大值可能就足够了。但是,如果您必须经常这样做,重复排序将变得非常昂贵。根据您的代码的工作方式,最简单的方法可能是简单地维护一个变量,该变量在任何给定点都包含添加的最后一个键和/或添加的最大值(即,随着每个后续添加到 dict )。但是,如果您想要维护超出最后一项的添加记录,并且不需要连续排序,那么 anOrderedDict
是理想的。
于 2012-06-27T19:53:42.377 回答
1
使用OrderedDict而不是内置的 dict
于 2012-06-27T19:53:31.880 回答
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'
但在大型数据集上可能会很慢。
于 2012-06-27T20:04:59.903 回答
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]
于 2012-06-27T20:44:57.363 回答