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',}]
我该怎么做才能保持我想要的顺序呢?
2 个回答
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 来保持字典的顺序。
3
首先,列表会保持元素的顺序,但列表里面的字典就不一定了,因为字典本身是无序的。其实有一种叫做 OrderedDict
的数据类型,它可以保持顺序,不过我觉得你可能不太需要这个。
还有几点建议:
不要把 list
当作变量名。
不要像在C语言中那样去遍历。你可以直接遍历:
for item in arr_id:
mylist.append({'id': item, 'porcentaje' : 0, 'estado' : 'En funcionamiento'})
或者甚至可以使用 列表推导式:
mylist = [{'id': item, 'porcentaje' : 0, 'estado' : 'En funcionamiento'}
for item in arr_id]