Как напечатать несортированный словарь в Python? - PullRequest
4 голосов
/ 28 мая 2010

У меня есть этот dict в питоне;

d={}
d['b']='beta'
d['g']='gamma'
d['a']='alpha'

когда я печатаю дикт;

for k,v in d.items():
    print k

я понял;

a
b
g

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

Гаф

Ответы [ 5 ]

11 голосов
/ 28 мая 2010

Как уже упоминалось, дикты не упорядочивают или не упорядочивают предметы, которые вы вставили. Это «волшебство» в отношении того, как они упорядочены при извлечении. Если вы хотите сохранить порядок - отсортированный или нет - вам также необходимо связать список или кортеж.

Это даст вам тот же самый точный результат со списком, который сохраняет порядок:

greek = ['beta', 'gamma', 'alpha']
d = {}
for x in greek:
    d[x[0]] = x

Просто измените [] на (), если вам не нужно менять исходный список / порядок.

11 голосов
/ 28 мая 2010

Dicts не работают так :

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

Вместо этого вы можете использовать список с двумя кортежами:

d = [('b', 'beta'), ('g', 'gamma'), ('a', 'alpha')]

Аналогичное, но лучшее решение изложено в ответ Уэйна .

6 голосов
/ 28 мая 2010

Не используйте словарь. Или используйте тип Python 2.7 / 3.1 OrderedDict.

2 голосов
/ 28 мая 2010

В словарях нет порядка, о котором можно говорить, нет оригинального несортированного списка .

1 голос
/ 28 мая 2010

Нет, python не сортирует dict, это будет слишком дорого. Порядок items() является произвольным. Из документов Python:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...