Python反向字典项目顺序

时间:2019-04-29 22:46:55

标签: python python-3.x sorting dictionary reverse

假设我有一本字典:

d = {3: 'three', 2: 'two', 1: 'one'}

我想重新排列这本词典的顺序,以便该词典是:

d = {1: 'one', 2: 'two', 3: 'three'}

我在想类似reverse()的列表函数,但这没用。预先感谢您的回答!

3 个答案:

答案 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