Python 列表更改顺序

0 投票
2 回答
3615 浏览
提问于 2025-04-17 20:36

我有以下这段代码:

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]

撰写回答