字典中键的顺序

29

我有一个字典

{'a': 'first', 'b': 'second'}

不过,我需要按另一种顺序排列这个字典:

{'b': 'second', 'a': 'first'}

最佳方法是什么?


好的,我的错,我会去阅读文档。我只是打印出来了,然后它按照特定的顺序出现了。我以为这与它的书写方式有关,就像 PHP 的数组一样。 - Qiao
1
啊,这里有:从教程中的5.5数据结构可以得知:“最好将字典视为一个无序的键值对集合,并要求键是唯一的(在一个字典内)。”。 - user166390
3
在StackOverflow上搜索“python dictionary order”就能轻松找到答案。 在发帖之前,您应该至少尝试一些东西 - Steven Rumbalski
1
可能是Python以什么顺序显示字典键?的重复问题。 - dawg
可能是如何在Python字典中反转键的顺序?的重复问题。 - om-nom-nom
显示剩余4条评论
3个回答

41

字典没有顺序,因此无法进行排序。

如果你使用的是Python2.7+版本,你可以使用collections.OrderedDict - 在这种情况下,您可以使用.items()检索项列表,然后将其倒转并从倒转后的列表创建一个新的OrderedDict

>>> od = OrderedDict((('a', 'first'), ('b', 'second')))
>>> od
OrderedDict([('a', 'first'), ('b', 'second')])
>>> items = od.items()  # list(od.items()) in Python3
>>> items.reverse()
>>> OrderedDict(items)
OrderedDict([('b', 'second'), ('a', 'first')])

如果你正在使用旧版本的Python,你可以从http://code.activestate.com/recipes/576693/获取回溯。


2
没错,你例子中的两个字典是等价的。 - Hyperboreus
2
排序和有序是不同的概念。OrderedDict 不是已经排序的,也不能手动排序,Python 中没有一种数据结构是自动排序的(即总是自动排序)。 - Rosh Oxymoron
这就是我想表达的意思。不过,我编辑了我的回答以使其更加清晰明了。 - ThiefMaster
1
@Roxy Oxymoron 但是可以从已排序的列表中创建OrderedDict。问题不是:“我如何创建一个始终有序的字典?” - user166390
在Python 3.4中不起作用。行items = od.items()返回ItemsView对象,该对象没有reverse()函数。 - AndrewSmiley
更新了我的回答,提到如何在Python 3中实现。 - ThiefMaster

8

字典没有顺序。

你可以获取键,按照自己的方式排序,然后以这种方式迭代字典值。

keys = myDict.keys()
keys = sorted(keys)  # order them in some way
for k in keys:
   v = myDict[k]

我认为你想要使用 keys.sort()sorted() 会返回一个新的列表,但不会修改传递的对象。 - ThiefMaster

4
你不能对字典进行排序。如果你需要有序的字典,请使用OrderedDict。

dict是可排序的(您始终可以对其应用sorted),但键的默认顺序无法影响。 - sophros
如果键是数字并且按顺序插入,例如1、2、3、...10,那么在这种情况下,顺序会被保留,对吗? - Sunni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接