假设我有一本字典:
d = {3: 'three', 2: 'two', 1: 'one'}
我想重新排列这本词典的顺序,以便该词典是:
d = {1: 'one', 2: 'two', 3: 'three'}
我在想类似reverse()
的列表函数,但这没用。预先感谢您的回答!
答案 0 :(得分:7)
从CPython 3.6(作为实现细节)和Python 3.7(作为语言保证)开始,普通dict
确实具有顺序。
在3.7及更低版本上,他们还没有在__reversed__
和dict
视图上支持dict
,因此您必须将项目转换为list
(或tuple
,并不重要),然后反向迭代:
d = {3: 'three', 2: 'two', 1: 'one'}
d = dict(reversed(list(d.items())))
当3.8发行时,items视图将以相反的方式进行本地迭代,因此您可以执行以下操作:
d = dict(reversed(d.items()))
根本不需要做临时list
。
3.6之前的版本,you'd need collections.OrderedDict
(用于输入和输出)均可以达到预期的效果。
答案 1 :(得分:2)
标准Python字典(在Python 3.6之前)没有顺序,也不保证顺序。这正是创建OrderedDict
的目的。
如果您的字典是OrderedDict
,则可以通过以下方式将其撤消:
import collections
mydict = collections.OrderedDict()
mydict['1'] = 'one'
mydict['2'] = 'two'
mydict['3'] = 'three'
collections.OrderedDict(reversed(list(mydict.items())))
答案 2 :(得分:0)
另一个简单的解决方案,保证适用于 Python v3.7 及更高版本:
d = {'A':'a', 'B':'b', 'C':'c', 'D':'d'}
dr = {k: d[k] for k in reversed(d)}
print(dr)
输出:
{'D': 'd', 'C': 'c', 'B': 'b', 'A': 'a'}
请注意,逆向字典仍被视为与其未逆向原始字典相同,即:
(d == dr) == True