2012-03-20 4 views
2

Возможный дубликат:
Python dictionary, keep keys/values in same order as declaredПорядок ключей в другой Dict Python()

Если у меня есть в той или иной программе два различных словарей с одинаковыми ключами (но разные значения) , будет .keys() быть в том же порядке? Я сделал несколько тестов, и, похоже, это так, но, не зная, как внутренние подразделения дикта, я не уверен, что это гарантировано.

Спасибо,

+2

Связанный: [ключи и значения всегда в том же порядке] (http://stackoverflow.com/questions/835092/python-dictionary-are-keys-and-values-always-the-same-order) –

+0

Спасибо, но это не дубликат. Я не спрашиваю, сохраняется ли порядок вставки (чего нет). Я спрашиваю, есть ли два словаря с теми же ключами (но, может быть, иная история), порядок один и тот же. – Hernan

+1

@bernie - упорядоченный словарь - это не то же самое, что и при заказе одинакового пути. Например, Java HashMap находится в произвольном порядке, но он всегда будет одним и тем же произвольным порядком для определенного набора ключей. –

ответ

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

2

Политика хранения ключей/предметов в том же порядке не применяется между двумя различными объектами словаря и не следует предполагать, что они удерживаются.

1

Если заказ важен, вы должны использовать OrderedDict: http://docs.python.org/dev/library/collections.html#collections.OrderedDict. Порядок ключей в словаре может измениться, когда пары ключ-значение вставлены или удалены.

Кроме того, порядок может варьироваться в зависимости от различных реализаций языка Python, поэтому вы не можете полагаться на то, что порядок тот же.

3

Это не гарантируется языком Python.

Реализация интерпретатора CPython, возможно, вернула ключи в том же порядке в некоторых предыдущих версиях, но для исправления security vulnerability это очень не гарантировано в текущих и будущих версиях.

+0

Порядок ключей всегда зависит от порядка вставки. –

+0

@SvenMarnach Да, но, предполагая тот же порядок, он был по совпадению идентичен одному объекту в одном интерпретаторе другому объекту в том же или другом интерпретаторе. Это не общий случай. – ephemient

0

Регулярные словари в Python не упорядочены, и вы не можете положиться на порядок ключей.

В Python 2.7 они представили OrderedDict. Этот объект хранит ключи в том порядке, в котором они были вставлены.

Если вы используете Python 2.6 или менее вы можете иметь такую ​​же функциональность, используя http://pypi.python.org/pypi/ordereddict

Смежные вопросы