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