2

我有一个默认的字典,其主键是字符串形式的时间戳 'YYYYMMDD HH:MM:SS'。键是按顺序输入的。如何访问最后输入的密钥或具有最新时间戳的密钥?

4

4 回答 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 回答