在Python 3.3中,向 ChainMap
模块添加了 collections
类:
提供ChainChain类,用于快速链接许多映射
因此可以将它们视为一个单元。它通常比
创建一个新字典并运行多个update()调用。
例:
>>> from collections import ChainMap
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 10, 'c': 11}
>>> z = ChainMap(y, x)
>>> for k, v in z.items():
print(k, v)
a 1
c 11
b 10
它受this issue激励,并由this one公开(未创建PEP
)。
据我了解,它是拥有额外字典并使用 update()
进行维护的替代方法。
问题是:
ChainMap
涵盖哪些用例? ChainMap
的真实示例? 额外的问题:是否可以在Python2.x上使用它?
我在Raymond Hettinger的 Transforming Code into Beautiful, Idiomatic Python
PyCon演讲中已经听说过它,我想将其添加到我的工具箱中,但是我不知道何时应该使用它。
参考方案
我喜欢@ b4hand的示例,实际上我过去曾使用过类似ChainMap的结构(但不使用ChainMap本身)来实现他提到的两个目的:多层配置覆盖和变量堆栈/作用域仿真。
与使用dict-update循环相比,我想指出ChainMap
的其他两个动机/优点/区别,因此仅存储“最终”版本”:
N
层和最多M
密钥,构造一个ChainMap会使用O(N)
和每个查询O(N)
最坏情况[*],而使用更新循环来构造dict则会使用O(NM)
和每个查询O(1)
。这意味着,如果您经常构造并且每次只执行几次查找,或者M
很大,ChainMap的惰性构造方法将对您有利。 [*](2)中的分析假设dict-access为O(1)
,而实际上平均为O(1)
,而O(M)
最坏的情况。查看更多详细信息here。
我有以下Python代码编写项目的依赖文件。它可以在Python 2.x上正常工作,但是在使用Python 3进行测试时会报告错误。depend = None if not nmake: depend = open(".depend", "a") dependmak = open(".depend.mak…
Python:对于长时间运行的进程,通过还是休眠? - python我正在编写一个队列处理应用程序,该应用程序使用线程等待和响应要发送到该应用程序的队列消息。对于应用程序的主要部分,只需要保持活动状态即可。对于像这样的代码示例:而True: 通过要么而True: time.sleep(1)哪一个对系统的影响最小?除了保持python应用运行外,什么都不做的首选方式是什么? 参考方案 我可以想象time.sleep()会减少系…
Python:无符号32位按位算术 - python试图回答另一篇有关其解决方案涉及IP地址和网络掩码的文章时,我陷入了普通的按位算法。在Python中,是否存在一种标准的方式来进行按位AND,OR,XOR,NOT运算,假设输入是“32位”(可能是负数)整数或long,并且结果必须是[[ 0,2 ** 32]?换句话说,我需要一个与无符号长整数之间的C按位运算有效的Python对应物。编辑:具体问题是这样的:…
>> Python中的运算符 - python>>运算符做什么?例如,以下操作10 >> 1 = 5有什么作用? 参考方案 它是右移运算符,将所有位“右移”一次。二进制10是1010移到右边变成0101这是5
Python:如何从字节中提取特定位? - python我有一条消息,显示为14 09 00 79 3d 00 23 27。我可以通过调用message[4]从此消息中提取每个字节,例如,这将给我3d。如何从该字节中提取单个8位?例如,如何将24-27位作为单个消息?只需28位? 参考方案 要回答问题的第二部分,您可以使用按位运算来获取特定的位值# getting your message as int i = …