python 字典的 key 用 int 好还是 str 好?

2015-08-28 13:57:33 +08:00
 2811299

把从数据库中取出的数据放在一个字典里,

其中一个 column 编号作为字典的 key,

请问这个 key 要 int ()一下 还是 str ()一下比较好?

4038 次点击
所在节点    Python
4 条回复
ryd994
2015-08-28 14:49:24 +08:00
既然已知是数字,当然 int 好
字符串比较性能根本没法比
WKPlus
2015-08-28 19:37:27 +08:00
数据说话:

In [18]: d={i:2*i for i in xrange (1000000 )}

In [19]: %timeit 10000 in d
10000000 loops, best of 3: 97.9 ns per loop

In [20]: d={str (i ):2*i for i in xrange (1000000 )}

In [21]: %timeit "10000" in d
10000000 loops, best of 3: 92 ns per loop

看到数据有点吃惊,但转念一想 dict 查找或者插入都先是 hash , hash 之后都是 int 了,比较也是比较的 hash 后的值(除了冲突的时候),所以就再比较一下 str 和 int 计算 hash 的效率:

In [24]: %timeit hash (12312093810298310928301 )
10000000 loops, best of 3: 81.7 ns per loop

In [25]: %timeit hash ("12312093810298310928301")
10000000 loops, best of 3: 78.5 ns per loop

如果有冲突,就需要值比对了,理论上来说这时候就需要对 str 进行比较了,应该比较慢了,但是还没有好的方法去寻找两个 hash 值一样的 str ,所以暂时无法测试
ryd994
2015-08-29 21:53:52 +08:00
@WKPlus nice point ,学习了
guoqiao
2015-09-03 07:53:56 +08:00
@WKPlus 我也想当然的觉得 int 更快, 实际却不是. 赞科学严谨的态度.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/216673

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX