我正在学习Python,并且在循环浏览词典时对迭代速度感到困惑。在其中一个教程中,我们不得不遍历字典并为假想的超市提取“关键”项目。我问了一个关于迭代字典的最佳实践原则的问题并被告知为迭代目的排序字典不会真正重要,直到你处理'大'数据集所以我不应该完全担心它。
我不确定为什么导师说这无所谓,因为我认为速度是处理大型数据集的关键。我做了一些阅读,发现了一个非常有用的帖子(Python: List vs Dict for look up table)。
由此,我可以假设根据任务,字典的排序是情境化的吗?或者你会说总是对词典进行排序以获得最佳处理速度?
要将其置于更多上下文中 - 让我们使用以下示例: 假设我们在一本有10,000个条目的词典中搜索一堆腰果的价格。在这种情况下,如果条目以随机的方式放在字典中 - 如果对条目进行排序,那么搜索该条目的速度是否会“更快”,而不是随机放置在任何地方?
非常感谢!
答案 0 :(得分:1)
要把它放在更多的上下文中 - 让我们使用下面的例子:假设我们在一个有10,000个条目的字典中搜索一堆腰果的价格。在这种情况下,如果条目以随机的方式放在字典中 - 如果对条目进行排序,那么搜索该条目的速度是否会“更快”,而不是随机放置在任何地方?
嗯...词典已经有了排序,因为它们是哈希表。不同之处在于它们按哈希而不是密钥本身排序。这意味着一旦计算了散列,基本上没有什么可以进一步加快访问速度。增益可以在哈希算法中找到,而不是在项目或结构本身中找到。
答案 1 :(得分:1)
为了更好地说明这一点 - 让我们使用下面的例子:说出我们 在字典中搜索一堆腰果的价格 有10,000个条目。在这种情况下,如果条目被放入 在字典中随机的方式 - 搜索的速度 该条目更快'如果它被分类,而不是随机放置 任何地方?
如何放置物品并不重要,检索物品的方式非常重要 - 因为这实际上就是您测量物体性能的方式。
字典使用哈希表来按键检索项目。这意味着项目的存储顺序并不重要,因为检索速度/方法/功能不依赖于插入顺序。
换句话说,当你有一个词典 d
,你就可以进行如下操作:
print(d[some_key])
some_key
的值的检索不依赖于它插入字典的顺序。如果插入字典中的第一个,第二个或最后一个项目将以相同的工作效率检索它。