- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我喜欢用 collections.OrderedDict有时当我需要一个关联数组时,应该保留键的顺序。最好的例子是解析或创建 csv 文件,其中在对象中隐式保留列的顺序很有用。
但我担心这是不好的做法,因为在我看来,关联数组的整个概念是键的顺序应该从不重要,并且任何操作依赖排序应该只使用列表,因为这就是存在列表的原因(这可以为上面的 csv 示例完成)。我没有这方面的数据,但我敢打赌,列表的性能普遍优于 OrderedDict。
所以我的问题是:OrderedDict 是否有任何真正引人注目的用例? csv 用例是应该在哪里使用它的好例子还是不好的例子?
最佳答案
But I'm worried that this is bad practice, since it seems to me that the whole concept of an associative array is that the order of the keys should never matter,
废话。那不是“关联数组的全部概念”。只是顺序很少重要,因此我们默认放弃顺序以获得概念上更简单(且更有效)的数据结构。
and that any operations which rely on ordering should just use lists because that's why lists exist
就此打住!想一想。 如何您会使用列表?作为具有唯一键的(键,值)对列表,对吧?好吧,恭喜,我的 friend ,你刚刚重新发明了 OrderedDict,只是使用了一个糟糕的 API,而且非常慢。对有序映射的任何概念上的异议也将适用于此特殊数据结构。幸运的是,这些反对意见都是无稽之谈。有序映射非常好,它们与无序映射不同。为它提供一个具有良好 API 和良好性能的恰当命名的专用实现可以改进人们的代码。
除此之外:列表只是一种有序的数据结构。虽然它们在某种程度上具有通用性,因为您几乎可以从列表的某种组合中获取所有数据结构(如果您向后弯腰),但这并不意味着您应该始终使用列表。
I don't have data on this, but I'm willing to bet that the performance for lists is universally better than OrderedDict.
数据(结构)没有(没有)性能。对数据(结构)的操作有。因此,这取决于您对哪些操作感兴趣。如果您只需要一个成对列表,那么列表显然是正确的,并且对其进行迭代或对其进行索引非常有效。但是,如果您想要一个也有序的映射,或者甚至是映射功能的一小部分(例如处理重复的键),那么单独的列表是非常糟糕的,正如我上面已经解释的那样。
关于python - 使用 collections.OrderedDict 是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17393502/
非常简单的应用程序 - 您可以复制 - 粘贴 - 运行。主要只是“创建”应用程序。 - 这不是问题(可能) #include #include #include #include typede
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 6 年前。 Improve t
Haskell 有一个名为 seq 的神奇函数,它接受任何类型的参数并将其简化为弱头范式 (WHNF)。 我读过一些资料[但我现在不记得他们是谁了...],它们声称“多态 seq 很糟糕”。他们在哪些
我正在编写一个脚本,该脚本应该在一堆服务器周围运行并从中选择一堆数据,包括本地服务器。选择我需要的数据所需的 SQL 非常复杂,所以我正在编写一种临时 View ,并使用 OPENQUERY 语句来获
考虑以下代码: case class Vector3(var x: Float, var y: Float, var z: Float) { def add(v: Vector3): Unit =
我正在读这个SO post关于守护线程,答案底部的引述是: But joining a demonized thread opens most likely a whole can of troubl
在阅读有关 Google webtool 工具包的内容时,看到一条声明说“同步 RPC 不好”。他们有什么理由吗?我能想到的一个很好的理由是,对最终用户的响应可能会受到远程服务器延迟或网络问题的影
我有以下 HTML: A Simple Sample Web Page By Sheldon Brown Demonstrating a few HTML feat
我正在做一项简单的任务,但我陷入困境...... output 我需要使第一行与其他所有内容保持一致,但无论我做什么,它都不想接受空格。那么,我应该纠正什么以及为什么?谢谢 public static
我在系统中有一个类,其目的列为“这可以是从午夜算起的秒数。或者带有日期的时间。”我试图解释这有多糟糕,但我无法理解我的观点。有没有人对如何解决这个问题有任何想法。 http://code-slim-j
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: When are C++ macros beneficial? Why is #define bad and
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
始终建议通过将所有代码放在 JS 文件中来避免内联 Javascript 代码,该文件包含在所有页面中。我想知道,这是否不会导致繁重的页面出现性能问题。 例如,假设我们有几十个这样的函数 functi
我主要在 AngularJS 中进行开发,最近我正在研究 Vue.js 并阅读它的指南,在它提到的一页上: By default, all props form a one-way-down bind
我正在构建一个本地化目录,但遇到了设计难题。现在,目录存储一个 Dictionary存储翻译,其中 IString可以是两种类型:Singular或 Plural .这是 IString 的简化版本:
对于我的矩阵类,我做了: template class Matrix { private: std::array, Height> Elements; stat
MSDN documentation说 public class SomeObject { public void SomeOperation() { lock(this) {
建议不要在 Python 中使用 import *。 谁能分享一下原因,这样我下次就可以避免了? 最佳答案 因为它会将很多东西放入您的命名空间(可能会影响之前导入的一些其他对象,而您不会知道它)。 因
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
G'day, 这与my question on star developers有关并到 this question regarding telling someone that they're wri
我是一名优秀的程序员,十分优秀!