键我有一本字典秩序Python字典
{'a': 'first', 'b': 'second'}
不过,我需要字典以不同的顺序:
{'b': 'second', 'a': 'first'}
什么是做到这一点的最好方法是什么?
键我有一本字典秩序Python字典
{'a': 'first', 'b': 'second'}
不过,我需要字典以不同的顺序:
{'b': 'second', 'a': 'first'}
什么是做到这一点的最好方法是什么?
词典为未订购。所以没有办法做到这一点。
如果你有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/
没错,你的例子中的两个字典都是相同的。 – Hyperboreus 2011-05-21 18:14:23
排序和排序是不同的东西。 'OrderedDict'没有排序,不能手动排序,Python中没有任何数据结构是有序数据结构(即总是自动排序)。 – 2011-05-21 18:18:24
这就是我的意思。但为了清晰起见编辑我的答案。 – ThiefMaster 2011-05-21 18:19:38
字典没有顺序。
你可以得到键,然后按照你喜欢的顺序排列它们,然后迭代字典值。
keys = myDict.keys()
keys = sorted(keys) # order them in some way
for k in keys:
v = myDict[k]
我想你想要'keys.sort()'。 'sorted()'返回一个新的列表,但不修改传递的对象。 – ThiefMaster 2011-05-21 18:17:10
@theif - 你是对的。谢谢。 – eduffy 2011-05-21 18:18:30
你不能; dict
s是unsortable。如果您需要有序的词典,请使用OrderedDict
。
好吧,我的错,我会阅读文档。我只是把它打印出来,然后按照特定的顺序排除。我认为这与它的写作方式有关。像php的数组。 – Qiao 2011-05-21 18:19:49
@乔这实际上是一个很好的问题。我喜欢“哦,这很容易回答文件” - 事实并非如此。这个“微不足道的事实”在大多数地方似乎被认为是知识。我能找到的最好的(OrderedDict,第8.3章)是“OrderedDict是一个字典,它记住了键被首次插入的顺序。” – 2011-05-21 18:22:05
嗯,它是这样的:“最好把字典看作一个*无序的*键值对,并且要求键是唯一的(在一个字典中)。”来自[教程中的5.5数据结构](http://docs.python.org/tutorial/datastructures.html#dictionaries)。 – 2011-05-21 18:29:03