繁体   English   中英

在Python中访问默认dict中最后输入的键的最佳方法是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM