2011-05-21 208 views
28

键我有一本字典秩序Python字典

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

不过,我需要字典以不同的顺序:

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

什么是做到这一点的最好方法是什么?

+0

好吧,我的错,我会阅读文档。我只是把它打印出来,然后按照特定的顺序排除。我认为这与它的写作方式有关。像php的数组。 – Qiao 2011-05-21 18:19:49

+0

@乔这实际上是一个很好的问题。我喜欢“哦,这很容易回答文件” - 事实并非如此。这个“微不足道的事实”在大多数地方似乎被认为是知识。我能找到的最好的(OrderedDict,第8.3章)是“OrderedDict是一个字典,它记住了键被首次插入的顺序。” – 2011-05-21 18:22:05

+1

嗯,它是这样的:“最好把字典看作一个*无序的*键值对,并且要求键是唯一的(在一个字典中)。”来自[教程中的5.5数据结构](http://docs.python.org/tutorial/datastructures.html#dictionaries)。 – 2011-05-21 18:29:03

回答

40

词典为未订购。所以没有办法做到这一点。

如果你有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 2011-05-21 18:14:23

+2

排序和排序是不同的东西。 'OrderedDict'没有排序,不能手动排序,Python中没有任何数据结构是有序数据结构(即总是自动排序)。 – 2011-05-21 18:18:24

+0

这就是我的意思。但为了清晰起见编辑我的答案。 – ThiefMaster 2011-05-21 18:19:38

6

字典没有顺序。

你可以得到键,然后按照你喜欢的顺序排列它们,然后迭代字典值。

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

我想你想要'keys.sort()'。 'sorted()'返回一个新的列表,但不修改传递的对象。 – ThiefMaster 2011-05-21 18:17:10

+0

@theif - 你是对的。谢谢。 – eduffy 2011-05-21 18:18:30

4

你不能; dict s是unsortable。如果您需要有序的词典,请使用OrderedDict