Python 如何按每个对象的属性值对对象列表进行排序?
我有一个列表对象,它在调试器中的外观如下: 如您所见,列表的元素按字母顺序排列。也就是说,在索引Python 如何按每个对象的属性值对对象列表进行排序?,python,pulp,Python,Pulp,我有一个列表对象,它在调试器中的外观如下: 如您所见,列表的元素按字母顺序排列。也就是说,在索引02,它有元素10,而不是2。还要注意的是,每个元素实际上是一个类型为pill.pill.LpVariable的对象,我们在列表中看到的数字实际上是每个对象的name属性的值(如最后一张图像列表所示)。纸浆似乎按字母顺序排列其变量 我希望这个列表按每个对象的名称进行数字排序。也就是说,我想在索引2处使用2,在索引3处使用3等等 我尝试了以下方法: >>> from pulp imp
02
,它有元素10
,而不是2
。还要注意的是,每个元素实际上是一个类型为pill.pill.LpVariable
的对象,我们在列表中看到的数字实际上是每个对象的name
属性的值(如最后一张图像列表所示)。纸浆似乎按字母顺序排列其变量
我希望这个列表按每个对象的名称进行数字排序。也就是说,我想在索引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, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 3, 4, 5, 6, 7, 8, 9]
正如您所看到的,排序根本没有发生。我希望最后一行的输出为:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
我怎样才能做到这一点呢?我不知道prob.variables()的作用是什么,但is是一个可调用的事实让我强烈怀疑,在排序和打印它时,您并不是在引用同一个列表,而是每次调用
prob.variables()
请尝试以下操作:
result = sorted(prob.variables(), key=lambda x:int(x.name))
print(result)