Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,访问默认dict中最后输入的键的最佳方式是什么?_Python_Python 2.7 - Fatal编程技术网

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

在Python中,访问默认dict中最后输入的键的最佳方式是什么?,python,python-2.7,Python,Python 2.7,我有一个默认的dict,其主键是字符串格式为“YYYYMMDD HH:MM:SS”的时间戳。这些键是按顺序输入的。如何访问上次输入的密钥或具有最新时间戳的密钥 如果您只需要访问最后输入的项目,请使用collections模块中的OrderedDict,而不是内置dict。但是,如果需要保持连续排序,则需要使用完全不同的数据结构,或者至少使用辅助数据结构进行索引 编辑:我想补充一点,如果访问最后一个元素是一个您必须很少执行的操作,那么只需对dict的键进行排序并选择最大值就足够了。但是,如果您必须

我有一个默认的dict,其主键是字符串格式为“YYYYMMDD HH:MM:SS”的时间戳。这些键是按顺序输入的。如何访问上次输入的密钥或具有最新时间戳的密钥

如果您只需要访问最后输入的项目,请使用
collections
模块中的
OrderedDict
,而不是内置dict。但是,如果需要保持连续排序,则需要使用完全不同的数据结构,或者至少使用辅助数据结构进行索引


编辑:我想补充一点,如果访问最后一个元素是一个您必须很少执行的操作,那么只需对dict的键进行排序并选择最大值就足够了。但是,如果您必须经常这样做,重复排序将变得非常昂贵。根据代码的工作方式,最简单的方法可能是简单地维护一个变量,该变量在任何给定点上都包含最后添加的键和/或最大添加值(即,随着dict的后续添加而更新)。但是,如果您想维护一个超出最后一项范围的添加记录,并且不需要连续排序,则理想的做法是使用
OrderedDict

您可以尝试以下方法:

>>> 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]

正如我在标题中提到的,我想访问最后输入的密钥。可能用于连续排序和适当的时间复杂性。@IOanalexandrucu,是的,这当然是可能的。如果仅限于标准库,另一种选择是使用键列表作为索引到dict的辅助数据结构,利用
bisect
模块维护列表的顺序。如果我使用默认dict怎么办?@idealistikz,请参阅我的编辑,它应该会回答您的问题。如果没有,那么我需要更多关于代码的信息。