Python中的dicionaries的字符串索引或整数索引?

时间:2016-06-14 11:00:30

标签: python string dictionary integer

我有一个字典作为不同键的计数器,即键的值是键发生的次数。 我使用字符串索引字典或整数索引字典更快吗?哪个有更好的表现?

2 个答案:

答案 0 :(得分:2)

# coding=utf-8

import sys
import timeit

print(sys.getsizeof(1000000000))
28

print(sys.getsizeof('aaaaaaa'))
56

print(timeit.timeit('{1:1}', number=10 ** 7))
0.935662218856579

print(timeit.timeit('{"1":1}', number=10 ** 7))
0.8795463330796326

print(timeit.timeit(stmt='a[1]', setup='a = {1:1}', number=10 ** 7))
0.24523148719450227

print(timeit.timeit(stmt='a["1"]',setup='a = {"1":1}', number=10 ** 7))
0.22414418170794992

print(timeit.timeit('{x*x:x for x in range(1000)}', number=1000))
0.10348407957872885

print(timeit.timeit('{"a"*x:x for x in range(1000)}', number=1000))
0.5330044677382393

整数使用更少的内存,但是当从字典中分配和访问字符串时,字符串会快一点......除非我们用字符串填充字典,否则整数更快。

跟里卡多说的一样。我怀疑是否存在重大差异。

如果你想要快速,请使用PyPy。

答案 1 :(得分:1)

你的答案是:它几乎没有区别。

问:为什么差不多?

答:字符串,取决于它们的大小,可能比整数更耗时,因为您需要解释器将字符串映射到数字,同时整数本身就是一个数字。但它可能会根据字符串的大小而有所不同。

但它对你的情况几乎没有任何影响。结果显示在Basili Syrakis提供的答案中。

您需要了解的是,字典基于散列表,因此渐进式O(1)将返回指定键的值。那么类型不应该是你的情况的一个很大的区别。