2

このような辞書構造 (または同じものを表す別のデータ構造) があるとします。

d = {
  42.123231:'X',
  42.1432423:'Y',
  45.3213213:'Z',
  ..etc
}

次のような関数を作成したい:

f(n,d,e):
    '''Return a list with the values in dictionary d corresponding to the float n
    within (+/-) the float error term e'''

したがって、上記の辞書で次のような関数を呼び出した場合:

f(42,d,2)

それは戻るだろう

['X','Y']

ただし、ループを使用してこの関数を作成するのは簡単ですが、辞書内のすべての値を調べて徹底的にチェックするようなことはしたくありませんが、何らかの形でインデックス付き構造 (またはソートされたリストを使用することもできます)。これにより、検索が大幅に高速化されます。

4

3 に答える 3

3

辞書はこれに対して間違ったデータ構造です。検索ツリーを作成します。

于 2012-10-24T15:49:19.267 に答える
0

数字キーのある辞書は通常、キー値によってソートされます。しかし、あなたは-安全のために-OrderedDictionaryとして再配置することができます-あなたは一度それをします

from collections import OrderedDict
d_ordered = OrderedDict(sorted(d.items(), key =lambda i:i[0]))

次に、値のフィルタリングはかなり単純です-そしてそれは上部の境界で停止します

import itertools    
values = [val for k, val in 
          itertools.takewhile(lambda (k,v): k<upper, d_ordered.iteritems()) 
          if k > lower]

すでに述べたように、辞書の順序付けは実際には必要ありませんが、この仮定は現在の実装に基づいており、将来変更される可能性があると言う人もいます。

于 2012-10-24T17:02:30.160 に答える
0

Python 辞書はハッシュマップの実装です。そのキーは、検索ツリーのように比較およびトラバースできません。そのため、実際にすべてのキーをチェックせずに python 辞書を使用してそれを行うことはできません。

于 2012-10-24T16:06:58.513 に答える