如果新的(订单保留)字典如此惊人,那么列表对象是否应该被避开?

Ric*_*ica 0 python cpython python-3.x

摘要

新的dict是如此惊人,我预计人们将开始使用它们 - 索引作为一切的关键.他们应该吗?如果没有,为什么不呢?

细节

我一直在关注python字典实现的非常令人兴奋的(对我而言)开发/更改.总结:实现已经改变,现在保留了字典的顺序,现在它们更紧凑/更高效:

https://twitter.com/raymondh/status/773978885092323328?lang=en

此外:看起来永久性的订单保存虽然目前无法保证,但不可避免.

我的问题是:鉴于内存效率得到了极大的提高,订单得以保留,并且你得到更快的项目删除/插入a dict,是否有任何充分的理由不使用字典来处理任何项目序列,使用索引作为键?

扩展问题:更改底层序列(listtuple)实现以使用与保留顺序相同的技术dict(再次:使用索引作为键/哈希)是否有意义?

对于那些参加过一些计算机科学课程的人来说,这个问题的答案可能非常明显.我只是一个doofus土木工程师(一点点自嘲幽默对灵魂有益),所以要温柔.

编辑:

我也意识到,dict当前形式的实用性需要扩展一点,以提供所有的铃声/口哨声list.目前缺少的一些东西包括insert方法,reverse方法和切片(当然,功能上的巨大漏洞).但是这些是添加到一个完整的有序dict对象是有意义的事情.

或者,也许添加一个dlist或者ldict,对于只接受密钥的collections模块,以及所有缺少的功能都是有用的.更多的内存使用,但更快的修改.dictintlist

Bło*_*tek 5

对于初学者,有内存考虑因素:

l = [ i for i in range(100000) ]
d = { i:i for i in range(100000) }
print("List: {}, Dict: {}".format(sys.getsizeof(l), sys.getsizeof(d)))
Run Code Online (Sandbox Code Playgroud)

输出:List: 824464, Dict: 6291552......

  • 我建议在打印中恢复`l`和`d`,因为你没有将它们命名为`list`和`dictionary`它可能会使人混淆,因为列表是第二个定义的 (3认同)