Python bson.son.son和collections.OrderedDict之间有什么区别?
主要在pymongo中使用bson.son.son来获取有序映射(dict) 但是python在集合中已经有了有序dict 我已经阅读了bson.son.son的文件。它确实说儿子和OrderedDict很相似,但没有提到区别Python bson.son.son和collections.OrderedDict之间有什么区别?,python,mongodb,python-2.7,pymongo,Python,Mongodb,Python 2.7,Pymongo,主要在pymongo中使用bson.son.son来获取有序映射(dict) 但是python在集合中已经有了有序dict 我已经阅读了bson.son.son的文件。它确实说儿子和OrderedDict很相似,但没有提到区别 那么有什么区别呢?什么时候应该使用SON,什么时候应该使用OrderedDict?目前,两者之间的细微差别在于仍然向后兼容Python 2.7和。 同样,SON序列化速度快于orderedict的论点在2018年不再正确 son模块被禁用 年在python中添加了集合.O
那么有什么区别呢?什么时候应该使用SON,什么时候应该使用OrderedDict?目前,两者之间的细微差别在于仍然向后兼容Python 2.7和。 同样,
SON
序列化速度快于orderedict
的论点在2018年不再正确
son
模块被禁用
年在python中添加了集合.OrderedDict(PEP-372)
虽然日期的不同并不能说明哪一个是最先发布的,但有趣的是,Mongodb已经为其用例实现了一个有序映射。我猜他们可能已经决定继续维护它以实现向后兼容性,而不是将其代码库中的所有SON
引用切换到集合
在这两种方法的小型实验中,您很容易看到collections.orderedict
的性能优于bson.son.son
In [1]: from bson.son import SON
from collections import OrderedDict
import copy
print(set(dir(SON)) - set(dir(OrderedDict)))
{'weakref,'iteritems','iterkeys','itervalues','模块','has_key','deepcopy','to_dict'}
每个回路14.3µs±758 ns(7次运行的平均值±标准偏差,每个100000个回路)
每个回路7.54µs±209 ns(7次运行的平均值±标准偏差,每个100000个回路)
每个回路11.5µs±350 ns(7次运行的平均值±标准偏差,每个100000个回路)
每个回路5.35µs±192 ns(7次运行的平均值±标准偏差,每个100000个回路)
在回答你关于何时使用SON的问题时,
如果在早于2.7
的Python版本中运行软件,请使用SON
如果您能提供帮助,请使用collections
模块中的OrderedDict
。
您也可以使用dict
,它们现在由docs在中订购SON提供了一个类似于collections的API。OrderedDict来自Python 2.7+。
更多详细信息,您可以找到usedir
和read source。感谢@BearBrown,docs没有提到这一区别。我想知道的是,为什么我们有儿子,而python已经有了OrderedDict
In [2]: %timeit s = SON([('a',2)]); z = copy.deepcopy(s)
In [3]: %timeit s = OrderedDict([('a',2)]); z = copy.deepcopy(s)
In [4]: %timeit s = SON(data=[('a',2)]); z = json.dumps(s)
In [5]: %timeit s = OrderedDict([('a',2)]); z = json.dumps(s)