Python字典排序异常(想要非字母顺序)

3 投票
3 回答
2791 浏览
提问于 2025-04-16 23:50

我正在尝试发送一个数据包,里面有一些我放在字典里的键。这些键需要按照特定的顺序打印出来,所以我试着写了一个函数来重新排列它们。我猜想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

Python中的字典是根据键的哈希值来排列的,这样看起来就像是随机的。如果你想让键有顺序,可以使用OrderedDict

1

Python 的字典并不是有顺序的容器。如果你需要一个有顺序的字典,可以看看 collections.OrderedDict

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]

撰写回答