但我担心这是不好的做法,因为在我看来,关联数组的整个概念是键的顺序永远不重要,
废话。这不是“关联数组的整个概念”。只是顺序很少重要,所以我们默认放弃顺序以获得概念上更简单(和更有效)的数据结构。
并且任何依赖于排序的操作都应该只使用列表,因为这就是列表存在的原因
停在那里!想一想。你会如何使用列表?作为(键,值)对的列表,具有唯一键,对吗?恭喜你,我的朋友,你刚刚重新发明了 OrderedDict,只是用了一个糟糕的 API,而且速度真的很慢。对有序映射的任何概念上的反对也将适用于这种自组织数据结构。幸运的是,这些反对意见是无稽之谈。有序映射非常好,它们只是与无序映射不同。给它一个恰当命名的专用实现,具有良好的 API 和良好的性能,可以改善人们的代码。
除此之外:列表只是一种有序的数据结构。虽然它们在某种程度上是通用的,因为您几乎可以从某种列表组合中提取所有数据结构(如果您向后弯曲),但这并不意味着您应该始终使用列表。
我没有这方面的数据,但我敢打赌,列表的性能普遍优于 OrderedDict。
数据(结构)没有(不)有性能。对数据(结构)的操作都有。因此,这取决于您对哪些操作感兴趣。如果您只需要一个对列表,那么一个列表显然是正确的,并且对其进行迭代或索引它非常有效。但是,如果您想要一个也已排序的映射,或者甚至是映射功能的一小部分(例如处理重复键),那么单独的列表非常糟糕,正如我在上面已经解释的那样。