2

主キーが文字列形式「YYYYMMDD HH:MM:SS」のタイムスタンプである辞書のデフォルトの辞書があります。キーは順番に入力されます。最後に入力されたキーまたはタイムスタンプが最新のキーにアクセスするにはどうすればよいですか?

4

4 に答える 4

7

最後に入力した項目にアクセスする必要がある場合OrderedDictは、モジュールからを使用してください。collectionsただし、継続的な並べ替えを維持する必要がある場合は、完全に異なるデータ構造を使用するか、少なくともインデックス作成の目的で補助的なデータ構造を使用する必要があります。

編集:最後の要素にアクセスすることが非常にまれにしか実行しない操作である場合は、dictのキーを並べ替えて最大値を選択するだけで十分な場合があることを付け加えておきます。ただし、これを頻繁に行う必要がある場合は、並べ替えを繰り返すと非常にコストがかかります。コードの動作に応じて、最も簡単なアプローチは、任意の時点で、最後に追加されたキーや追加された最大値を含む単一の変数を維持することです(つまり、辞書に追加されるたびに更新されます) )。ただし、最後の項目だけにとどまらない追加の記録を保持したいが、継続的な並べ替えを必要としない場合は、OrderedDictが理想的です。

于 2012-06-27T19:53:42.377 に答える
1

組み込みのdictではなくOrderedDictを使用する

于 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 に答える