草庐IT

OrderedDict

全部标签

python - OrderedDict 性能(与 deque 相比)

我一直在尝试在Python中优化BFS实现的性能,我最初的实现是使用deque来存储要扩展的节点队列和dict来存储相同的节点,这样我就可以有效地查找它是否已经打开了。我尝试通过迁移到OrderedDict来优化(简单性和效率)。然而,这需要更多的时间。使用deque/dict完成400个样本搜索需要2秒,而仅使用OrderedDict则需要3.5秒。我的问题是,如果OrderedDict的功能与两个原始数据结构相同,那么它至少在性能上不应该相似吗?或者我在这里错过了什么?下面的代码示例。仅使用OrderedDict:open_nodes=OrderedDict()closed_nod

python - 迭代 OrderedDict 的最pythonic方法是什么

我有一个OrderedDict,我想在一个循环中获取索引、键和值。这肯定可以通过多种方式完成,即a=collections.OrderedDict({…})fori,b,cinzip(range(len(a)),a.iterkeys(),a.itervalues()):…但我想避免range(len(a))并将a.iterkeys()、a.itervalues()缩短为a.iteritems()之类的东西。使用enumerate和iteritems可以改写为fori,dinenumerate(a.iteritems()):b,c=d但它需要在循环体内解压。有没有办法在for语句中解包,

Python OrderedDict 迭代

为什么我的pythonOrderedDict被“乱序”初始化?这里的解决方案没有解释那么有趣。这里有些东西我就是不明白,也许扩展会帮助其他人和我一样。>>>fromcollectionsimportOrderedDict>>>spam=OrderedDict(s=(1,2),p=(3,4),a=(5,6),m=(7,8))>>>spamOrderedDict([('a',(5,6)),('p',(3,4)),('s',(1,2)),('m',(7,8))])>>>forkeyinspam.keys():...printkey...#thisis'ordered'butnottheord

python - 在 Python 3 中获取第一项 `OrderedDict` 的最短方法

在Python3中获取OrderedDict第一项的最短方法是什么?我最好的:list(ordered_dict.items())[0]又长又丑。我能想到的:next(iter(ordered_dict.items()))#Fixed,thanksAshwini但它不是很self描述。有更好的建议吗? 最佳答案 可读性编程实践一般来说,如果您觉得代码不是自描述的,通常的解决方案是将其分解为一个命名良好的函数:deffirst(s):'''Returnthefirstelementfromanorderedcollectionoran

python - 覆盖 {...} 符号所以我得到 OrderedDict() 而不是 dict()?

Update:dictsretaininginsertionorderisguaranteedforPython3.7+我想使用.py文件,例如配置文件。因此,使用{...}表示法,我可以使用字符串作为键创建字典,但定义顺序在标准python字典中丢失。我的问题:是否可以覆盖{...}符号以便我得到OrderedDict()而不是dict()?我希望简单地用OrderedDict(dict=OrderedDict)覆盖dict构造函数,但它没有。例如:dict=OrderedDictdictname={'Bkey':'value1','Akey':'value2','Ckey':'va

python - 为什么 OrderedDict 的值不相等?

使用Python3:>>>fromcollectionsimportOrderedDict>>>d1=OrderedDict([('foo','bar')])>>>d2=OrderedDict([('foo','bar')])我想检查是否相等:>>>d1==d2True>>>d1.keys()==d2.keys()True但是:>>>d1.values()==d2.values()False你知道为什么值不相等吗?我已经用Python3.4和3.5对此进行了测试。根据这个问题,我在Python-Ideas邮件列表上发布了更多详细信息:https://mail.python.org/pi

python - 旧版本 python 的 OrderedDict

有序字典是非常有用的结构,但不幸的是,这些是最近才在3.1的版本中工作的。和2.7.如何在旧版本中使用有序字典? 最佳答案 我用pip在python2.6上安装了ordereddictpipinstallordereddict 关于python-旧版本python的OrderedDict,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1617078/

python - OrderedDict 推导式

我可以在python中扩展语法以对其他字典进行字典理解,例如collections模块中的OrderedDict或我自己的继承自dict的类型吗?仅仅重新绑定(bind)dict名称显然是行不通的,{key:value}理解语法仍然为您提供了一个普通的旧字典,用于理解和文字。>>>fromcollectionsimportOrderedDict>>>olddict,dict=dict,OrderedDict>>>{i:i*iforiinrange(3)}.__class__那么,如果可能的话,我会怎么做呢?如果它只适用于CPython就可以了。对于语法,我想我会尝试使用O{k:v}前缀

python - 有什么理由不使用 OrderedDict?

我指的是OrderedDict来自collections模块,这是一个有序字典。如果它具有可订购的附加功能,我意识到这通常可能不是必需的,但即便如此,有什么缺点吗?是不是比较慢?它缺少任何功能吗?我没有看到任何缺失的方法。简而言之,为什么不应该我总是使用这个而不是普通的字典? 最佳答案 OrderedDict是dict的子类,并且需要更多内存来跟踪添加键的顺序。这不是微不足道的。该实现增加了第二个dict在幕后,所有键的双向链接列表(这是记住顺序的部分),以及一堆弱引用代理。这不是很多慢,但至少比使用普通dict的内存增加了一倍。.

python - 如何将元素添加到 OrderedDict 的开头?

我有这个:d1=OrderedDict([('a','1'),('b','2')])如果我这样做:d1.update({'c':'3'})然后我明白了:OrderedDict([('a','1'),('b','2'),('c','3')])但我想要这个:[('c','3'),('a','1'),('b','2')]不创建新字典。 最佳答案 在Python2中没有内置的方法可以做到这一点。如果你需要这个,你需要编写一个prepend()方法/函数来操作OrderedDict复杂度为O(1)的内部结构。对于Python3.2及更高版本,