如何按每个对象的属性值对对象列表进行排序?

问题描述

我有一个列表对象,它在调试器中的外观如下:

enter image description here

如您所见,list的元素按字母顺序排列。那是在索引02上,它具有元素10而不是2。还要注意,每个元素实际上是pulp.pulp.LpVariable类型的对象,我们在列表中看到的数字实际上是每个对象的name属性的值(可以在图像的最后一个列表中看到)。纸浆似乎按字母顺序对变量进行排序。

我希望此列表按每个对象的名称进行数字排序。那就是我想在索引{{1}处使用2,在索引2处使用3,依此类推。

我在下面尝试过

3

如您所见,排序根本没有发生。我希望最后一行的输出是:

>>> from pulp import *
>>> prob = LpProblem("lp",LpMinimize)
>>> dvs = {}
>>> for i in range(20):
...     dvs[i]=LpVariable(str(i))
... 
>>> prob += lpSum(dvs.values())
>>> prob.variables()
[0,1,10,11,12,13,14,15,16,17,18,19,2,3,4,5,6,7,8,9]
>>> prob.variables().sort(key=lambda x:int(x.name))
>>> prob.variables()
[0,9]

我该怎么做?

解决方法

我不知道prob.variables()的作用,但可调用的事实使我强烈怀疑,在对它进行排序和打印时,不是指的是同一列表,而是得到了一个新列表列出您每次致电prob.variables()

请尝试以下操作:

result = sorted(prob.variables(),key=lambda x:int(x.name))
print(result)