2010-02-18 3 views

ответ

16

Словари в python (и хэш-таблицы вообще) неупорядочены. В python вы можете использовать метод sort() на ключах для их сортировки.

+0

Хорошо, я буду использовать ключи/значения – myfreeweb

0

А что такое «стандартный заказ», который вы ожидаете? Это очень зависит от приложения. Словарь python в любом случае не гарантирует, что будет упорядочен ключ.

В любом случае вы можете перебирать словарные ключи() так, как хотите.

5

Словари не имеют внутреннего порядка. Вам придется либо свернуть свою собственную заказную реализацию dict, использовать ordered list of tuples, либо использовать existing ordereddict implementation.

+0

404. неработающая ссылка! – myfreeweb

+0

@myfreeweb: есть две ссылки, и я могу получить к ним доступ как http://www.voidspace.org.uk/python/odict.html http://code.activestate.com/recipes/107747/ – voyager

2

Теперь вы знаете dicts неупорядоченен, вот как преобразовать их в список, который вы может заказ

>>> a = {'one': '1', 'two': '2', 'three': '3', 'four': '4'} 
>>> a 
{'four': '4', 'three': '3', 'two': '2', 'one': '1'} 

отсортирован по ключевому

>>> sorted(a.items()) 
[('four', '4'), ('one', '1'), ('three', '3'), ('two', '2')] 

отсортированных по значению

>>> from operator import itemgetter 
>>> sorted(a.items(),key=itemgetter(1)) 
[('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')] 
>>> 
0

От Python Tutorial:

Лучше думать словарь как неупорядоченный набор пар ключ: значение

и одну из Python Standard Library (около dict.items):

Детали реализации CPython: Ключи и значения перечислены в произвольном порядке, который является неслучайным, варьируется в реализациях Python и зависит от истории словаря вставки и удаления.

Так что, если вам нужно обработать Dict в определенном порядке, отсортировать ключи или значения, например:

>>> sorted(a.keys()) 
['four', 'one', 'three', 'two'] 
>>> sorted(a.values()) 
['1', '2', '3', '4'] 
5

Python3.1 имеет OrderedDict

>>> from collections import OrderedDict 
>>> o=OrderedDict([('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')]) 
>>> o 
OrderedDict([('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')]) 
>>> for k,v in o.items(): 
... print (k,v) 
... 
one 1 
two 2 
three 3 
four 4 
+0

Awesome. Но я сделал это без заказанного диктофона на Python 2. – myfreeweb

+0

и элементы в Orderedicts упорядочены, когда элементы добавляются в словарь, а не с помощью ключа или элемента. Поэтому, если вы добавляете элементы не в порядок - и OrderedDict не поможет :-) –

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