2014-03-03 61 views
0

我有下面的代码:Python列表切换顺序

for i in xrange(len(arr_id)): 
    list.append({'id': arr_id[i], 'porcentaje' : 0, 'estado' : 'En funcionamiento'}) 

如果我打印list看来我得到一个字母顺序排列的列表:
[{'estado': 'En funcionamiento', 'id': 0, 'porcentaje': 0}]

这是不是在我定义的顺序相同它:
[{'id': 0, 'porcentaje': 0, 'estado': 'En funcionamiento',}]

我该怎么做才能保持所需的顺序?

+8

Python词典没有设置顺序。为什么你需要维护字典键顺序? –

+0

你正在整理一个只有一个项目的列表,这是一个词典。正如Martinjn指出的那样,Python词典没有“秩序”。 – Depado

+0

因为这创建了一个'json',我需要一个确切的顺序来读取它们在Java中。 –

回答

2

首先,列表将维护顺序,但列表中的字典不会,因为字典按照定义无序。有一个名为OrderedDict的数据类型确实保持顺序,但我怀疑你确实需要这样做。

其他一些意见:

不要使用list作为变量名。

不要重复,仿佛是Python的C.您可以直接迭代:

for item in arr_id: 
    mylist.append({'id': item, 'porcentaje' : 0, 'estado' : 'En funcionamiento'}) 

甚至使用list comprehension

mylist = [{'id': item, 'porcentaje' : 0, 'estado' : 'En funcionamiento'} 
      for item in arr_id] 
0

首先,你不处理一个列表现在。你正在处理一个嵌套在列表中的词典(这是毫无意义的,因为你的列表中只有一个项目)

你不能“排序”一个词典,因为它太容易从键中获得它的值。在你的情况下:

>>> x = {'estado': 'En funcionamiento', 'id': 0, 'porcentaje': 0} 
>>> x['estado'] 
b"En funcionamiento" 

所以没有必要排序一个字典。

虽然你可以显示你的字典的排序表示。这只会用于打印目的。

import operator 
x = {'estado': 'En funcionamiento', 'id': 0, 'porcentaje': 0} 
sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1)) 

或者其他的答案中指出,你可以使用一个OrderedDict留住你的字典顺序。