Python列表更改顺序

时间:2014-03-03 10:49:30

标签: python list dictionary

我有以下代码:

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',}]

如何维持所需的订单?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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来保留您的字典顺序。