2012-03-20 60 views
2

可能重复的:
Python dictionary, keep keys/values in same order as declared为了在不同的Python字典()键

如果我有一个特定的程序两种不同的字典相同的按键(但不同的值) .keys()会以相同的顺序吗?我做了一些测试,似乎是这样,但是不知道字典的内部是如何保证的,我不确定字典的内部。

感谢,

+2

相关相同的功能:是否以相同的顺序键和值始终](http://stackoverflow.com/questions/835092/python-dictionary-are-keys-and-values-always-the-same-order) – 2012-03-20 19:58:57

+0

谢谢,但不是重复的。我不问,是否保留了广告订单(不是)。我问,如果给两个字典使用相同的密钥(但可能是不同的历史记录),则顺序是相同的。 – Hernan 2012-03-20 19:59:01

+1

@bernie - 有序字典与总是以相同方式排序并不相同。例如,Java HashMap的使用顺序是任意的,但对于一组特定的密钥,它始终是相同的任意顺序。 – 2012-03-20 20:00:22

回答

10

你可以不依赖于关键顺序在所有:

>>> {1: None, 9: None} 
{1: None, 9: None} 
>>> {9: None, 1: None} 
{9: None, 1: None} 
>>> {1: None, 2: None} 
{1: None, 2: None} 
>>> {2: None, 1: None} 
{1: None, 2: None} 

字典是无序的。但在Python 2.7中,有collections.OrderedDict

+0

你打败了我。 – silent1mezzo 2012-03-20 20:00:16

2

在两个不同的字典对象之间应用保持键/项目在相同顺序中的策略而不是,并且不应假定为保持。

3

Python语言不能保证它。

CPython解释器的实现可能会在以前的某些版本中以相同的顺序返回键,但要修复security vulnerability,在当前版本和未来版本中这是非常不能保证的。

+0

键的顺序始终取决于插入顺序。 – 2012-03-20 20:09:04

+0

@SvenMarnach是的,但假设它的顺序相同,从一个解释器中的一个对象到同一个或不同解释器中的另一个对象恰好相同。这不是一般情况。 – ephemient 2012-03-20 20:13:41

0

Python中的常规字典没有排序,您不能依赖键的顺序。

在Python 2.7中,他们引入了OrderedDict。该对象按照它们插入的顺序存储这些键。

如果你正在使用Python 2.6或更低,你可以通过使用http://pypi.python.org/pypi/ordereddict