使用列表反转订单后,在python中重建字典

时间:2012-12-17 23:18:32

标签: python list dictionary reverse

我想在这篇文章reverse dictionary order中做同样的事情。我不明白如何使用OrderedDict。我用反向列表中使用的dict()方法尝试了这段代码 但它给了我最初的字典。

mydic = {'n1': 3, 'n2': 9}
ol = mydic.items()
ol.reverse()
print(ol)
dc = dict(ol)
print(dc)

结果我得到了:

ol >> [('n2', 9), ('n1', 3)]
dc >> {'n1': 3, 'n2': 9}

有没有办法在撤销订单后重建字典?

提前致谢

3 个答案:

答案 0 :(得分:2)

您的方法的主要问题是原始字典不保证其密钥的任何特定顺序。虽然您可以获取mydic项的快照,反转顺序,并将结果存储在OrderedDict中,但输出将是未定义的(因为输入未定义)。

换句话说,垃圾中的垃圾。

如果您从一组可重复的键值对开始,那么您可以使用OrderedDict

In [18]: ol = [('n2', 9), ('n1', 3)]

In [19]: OrderedDict(reversed(ol))
Out[19]: OrderedDict([('n1', 3), ('n2', 9)])

答案 1 :(得分:2)

常规Python词典不保留任何顺序,因此重新排列键不会有用。

话虽如此,OrderedDict使用起来非常简单:

>>> from collections import OrderedDict
>>> 
>>> ol = [('n2', 9), ('n1', 3)]
>>> dc = OrderedDict(ol)
>>> dc
OrderedDict([('n2', 9), ('n1', 3)])

答案 2 :(得分:0)

使用collections.OrderedDict

  

有序词典就像常规词典一样,但它们记住了项目的插入顺序。迭代有序字典时,项目按照其键首次添加的顺序返回。