Python словарь сортировка странно (хочу не алфавитный) - PullRequest
3 голосов
/ 18 августа 2011

поэтому я пытаюсь отправить пакет с некоторыми ключами, которые я положил в словарь.они должны быть напечатаны в определенном порядке, поэтому я попытался создать функцию, чтобы изменить их порядок.Я предполагаю, что python делает что-то, чтобы изменить порядок в том порядке, в котором я не хочу, но я не уверен, почему.

В настоящее время я использую эту функцию, чтобы попытаться добиться этого.

def array_sort(array, sort): #yeah, it's array cuz i php like that.
    ordered = {}
    for i in range(0,len(sort)):
        if sort[i] in array:
            ordered[sort[i]] = array[sort[i]]
    keys = array.keys()
    return ordered 


order = "l5,l4,l3,l2,q,y,k,k3,d1,z,p,c,b,d3,dt,N,n,a,h,v".split(',')
keys = array_sort(infos, order)

по какой-то причине это не работает, infos - это список клавиш в алфавитном порядке, я просто не уверен, почему функция выводит клавиши в нечетном порядке.(во-первых, когда 15 должно быть первым: S)

Если вы знаете лучший способ сделать это, не стесняйтесь сказать мне, я только недавно начал работать на Python, так что я не настолько знаком.

РЕДАКТИРОВАТЬ: я смог распечатать ключи в правильном порядке, используя это сразу после создания словаря заказа.даже если он был просто выведен в виде строки, порядок будет сохранен (на данный момент), и вы можете .split () его снова, чтобы получить словарь в правильном порядке (я думаю).

for i in range(0, len(order)):
    if order[i] in infos:
        packet += order[i] + '="' + infos[order[i]] + '" '

Ответы [ 3 ]

2 голосов
/ 18 августа 2011

Поскольку словари в Python неупорядочены, и все, что вам нужно, это выводить результаты, упорядоченные по указанному правилу, вы можете сделать что-то вроде этого:

order = "l5,l4,l3,l2,q,y,k,k3,d1,z,p,c,b,d3,dt,N,n,a,h,v".split(',')

for key in order:
    print key, infos.get(key)#if infos is your dictionary

Или вы можете получить / передать список вместо того, чтобы определятьследующим образом:

print [(key, infos.get(key)) for key in order]
1 голос
/ 18 августа 2011

Словари Python не являются упорядоченными контейнерами. Взгляните на collection.OrderedDict вместо

0 голосов
/ 18 августа 2011

Словари Python упорядочивают свои ключи на основе своего хэша, что делает его случайным.Я рекомендую использовать OrderedDict , чтобы привести ключи в порядок.

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