3

多くの場合、ネストされた辞書からのデータ取得は、タプル キーを持つ辞書からのデータ取得よりもはるかに高速であることに気付きました。これは、ここで述べたことと矛盾しているようです。誰でもこれの原因を説明できますか? 私の問題は、より速い方法は「pythonic」ではなく、巨大な醜いネストされた辞書につながる可能性があることです(たとえば、a_dict [a、b、c、d]の代わりにa_dict [a] [b] [c] [d])。

以下は、整数をキーとして使用するときにこれが発生する例です。

タプルの使用:

print timeit.timeit('''
for (int1, int2) in indexes:
    x[ int1, int2 ]
''', setup='''
x={}
indexes = []
for int1 in xrange(1000):
    for int2 in xrange(1000):
        x[ int1, int2 ] = 'asd'
        indexes.append((int1, int2))
''', number = 100)

ネストされた辞書の使用:

print timeit.timeit('''
for (int1, int2) in indexes:
    x[int1][ int2 ]
''', setup='''
x={}
indexes = []
for int1 in xrange(1000):
    x[int1] = {}
    for int2 in xrange(1000):
        x[ int1 ][int2] = 'asd'
        indexes.append((int1, int2))
''', number = 100)

結果:

36.8627537348
12.2223380257

これは私の意見では非常に大きな違いです。

4

2 に答える 2

0

タプルのハッシュはコストがかかるようです。新しい dict を作成し、挿入時に整数のロックアップを行うだけではありません。

于 2013-08-29T08:37:40.450 に答える