当前位置:  开发笔记 > 编程语言 > 正文

python中字典和ordereddict之间的区别

如何解决《python中字典和ordereddict之间的区别》经验,为你挑选了2个好方法。



1> Brian Maleho..:

一个OrderedDict保留的顺序的元件插入:

>>> od = OrderedDict()
>>> od['c'] = 1
>>> od['b'] = 2
>>> od['a'] = 3
>>> od.items()
[('c', 1), ('b', 2), ('a', 3)]
>>> d = {}
>>> d['c'] = 1
>>> d['b'] = 2
>>> d['a'] = 3
>>> d.items()
[('a', 3), ('c', 1), ('b', 2)]

所以a OrderedDict不会为你订购元素,它会保留 你给它的顺序.

如果你想"排序"字典,你可能想要

>>> sorted(d.items())
[('a', 1), ('b', 2), ('c', 3)]


并且要将`dict`转换为`OrderedDict`(最初)具有按排序顺序的键,你可以:`od = OrderedDict(sorted(d.items()))`.
请注意,默认情况下,字典现在按插入顺序排序。

2> Mike T..:

从Python 3.7开始,新的改进是:

dict对象的插入顺序保留性质已声明是Python语言规范的正式组成部分。

这意味着OrderedDict不再需要。它们几乎相同。


但是,需要考虑一些小细节...

但是,Python 3.7+ dict和之间存在差异OrderedDict,此处显示:

from collections import OrderedDict

d = {'b': 1, 'a': 2}
od = OrderedDict([('b', 1), ('a', 2)])

# they are equal with content and order
assert d == od
assert list(d.items()) == list(od.items())
assert repr(dict(od)) == repr(d)

显然,两个对象的字符串表示形式之间存在差异,而dict对象的形式更自然,更紧凑。

str(d)  # {'b': 1, 'a': 2}
str(od) # OrderedDict([('b', 1), ('a', 2)])

至于两者之间的不同方法,可以用集合论来回答这个问题:

d_set = set(dir(d))
od_set = set(dir(od))
od_set.difference(d_set)
# {'__dict__', '__reversed__', 'move_to_end'}

这意味着OrderedDict至少具有两个dict内置功能,但此处显示了解决方法:

# 1) OrderedDict can be reversed (but then what?)
reversed(od)
# 
reversed(d)
# TypeError: 'dict' object is not reversible
# better way to reverse a dict
dict(reversed(list(d.items())))  # {'a': 2, 'b': 1}

# 2) OrderedDict has 'move_to_end' method
od.move_to_end('b')  # now it is: OrderedDict([('a', 2), ('b', 1)])
# dict does not, but similar can be done with
d['b'] = d.pop('b')  # now it is: {'a': 2, 'b': 1}

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有