Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python bson.son.son和collections.OrderedDict之间有什么区别?_Python_Mongodb_Python 2.7_Pymongo - Fatal编程技术网

Python bson.son.son和collections.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

主要在pymongo中使用bson.son.son来获取有序映射(dict)

但是python在集合中已经有了有序dict

我已经阅读了bson.son.son的文件。它确实说儿子和OrderedDict很相似,但没有提到区别


那么有什么区别呢?什么时候应该使用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+。
更多详细信息,您可以找到use
dir
和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)