Python中的二维与一维字典效率

时间:2012-04-16 22:53:48

标签: python performance dictionary nested tuples

在内存和速度方面更有效率

d[(first,second)]

d[first][second]

其中d是元组或词典的字典?

2 个答案:

答案 0 :(得分:5)

这是一些非常基本的测试数据,表明对于一个非常人为的例子(使用数字作为键存储'a'一百万次),使用2个字典要快得多。

$ python -m timeit 'd = {i:{j:"a" for j in range(1000)} for i in range(1000)};a = [d[i][j] for j in range(1000) for i in range(1000)];'
10 loops, best of 3: 316 msec per loop
$ python -m timeit 'd = {(i, j):"a" for j in range(1000) for i in range(1000)};a = [d[i, j] for j in range(1000) for i in range(1000)];'
10 loops, best of 3: 970 msec per loop

当然,这些测试并不一定意味着什么取决于你想要做什么。确定您要存储的内容,然后进行测试。

更多数据:

$ python -m timeit 'a = [(hash(i), hash(j)) for i in range(1000) for j in range(1000)]'
10 loops, best of 3: 304 msec per loop
$ python -m timeit 'a = [hash((i, j)) for i in range(1000) for j in range(1000)]'
10 loops, best of 3: 172 msec per loop
$ python -m timeit 'd = {i:{j:"a" for j in range(1000)} for i in range(1000)}'
10 loops, best of 3: 101 msec per loop
$ python -m timeit 'd = {(i, j):"a" for j in range(1000) for i in range(1000)}'
10 loops, best of 3: 645 msec per loop

再一次显然表示现实世界的使用,但在我看来,像这样的元组构建字典的成本是巨大的而且这就是字典中的字典胜出。这令我感到惊讶,我期待完全不同的结果。我有空的时候还要再尝试一些事情。

答案 1 :(得分:1)

有点令人惊讶的是,在CPython 2.7和Pypy 1.8中,词典字典比元组更快。

我没有检查空间,但你可以用ps来做。