[英]How can we sort list of objects by attribute value of each object?
我有一個列表對象,它在調試器中看起來如下:
如您所見,列表的元素按字母順序排列。 即在索引02
,它具有元素10
,而不是2
。 另請注意,每個元素實際上是一個pulp.pulp.LpVariable
類型的對象,我們在列表中看到的數字實際上是每個對象的name
屬性的值(如最后一個圖像列表所示)。 Pulp 似乎按字母順序對其變量進行排序。
我希望這個列表按每個對象的名稱進行數字排序。 那就是我想要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()
是做什么的,但它是一個可調用的事實讓我強烈懷疑您在排序和打印時不是指同一個列表,而是每次都得到一個新列表你打電話給prob.variables()
請嘗試以下操作:
result = sorted(prob.variables(), key=lambda x:int(x.name))
print(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.