奇怪的python字典排序(想要非字母)

时间:2011-08-18 02:58:08

标签: python dictionary key

所以我试图发送一个数据包,其中包含一些我已放入字典中的键。这些需要以特定的顺序打印,所以我试图做一个功能来重新排序它们。我假设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 个答案:

答案 0 :(得分:2)

由于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 :(得分:1)

Python词典不是有序容器。请查看collections.OrderedDict而不是

答案 2 :(得分:0)

Python字典根据其哈希值对其键进行排序,这将使其看起来是随机的。我建议您使用OrderedDict按顺序获取密钥。