[英]Sorting a Dict whose values are objects Python
我有一個dict
,其中的值是Object
的list
。
我需要根據對象的屬性之一對它們進行排序。
{key1 : [(list1 of obj),(list2 of obj),(list3 of obj)], key2 : [(list1 of obj),(list2 of obj)]}
我需要按屬性之一對值list
進行排序,例如“數量”。
我的代碼結構是:
for objlist in mydict[key]:
sorted(objlist ,key=lambda k: (k.Quantity),reverse=True)
sorted(objlist , key=operator.itemgetter)
s = sorted(s, key = lambda x: (x[1], x[2]))
objlist.sort(key=operator.attrgetter("Quantity"), reverse=False)
objlist.sort(key = lambda x: x.Quantity)
我嘗試了上述所有選項,但沒有任何效果。
這是一些示例代碼
class Test():
def __init__(self,q):
self.Quantity = q
def __repr__(self):
return "<Class Test: Quantity=" + str(self.Quantity) + ">"
mydict = mydict = {"a":[ Test(3), Test(2), Test(4)], "b": [Test(8), Test(10), Test(6)], "c":[Test(14), Test(12), Test(20)]}
print "Before Sort"
for key in mydict:
print (key,mydict[key])
dict_with_sorted_list = {}
for key in mydict:
dict_with_sorted_list[key] = sorted(mydict[key], key=lambda k: k.Quantity, reverse=True)
print "After Sort"
for key in dict_with_sorted_list:
print (key,dict_with_sorted_list[key])
如果您只是將排序后的列表分配回原始詞典,則還可以使用列表對象的sort()
方法對每個列表進行排序,並避免創建新列表。 用法類似於sorted()
。 因為您沒有創建新列表,所以sort()
方法比使用sorted()
更快。 在實踐中,除非您發現需要優化,否則這通常不會有太大變化,這是一個緊要關頭。
>>> # Python 3.x
... from random import randint
>>>
>>> class Test(object):
... # Borrowed from the accepted answer.
... def __init__(self, q):
... self.Quantity = q
... def __repr__(self):
... return "<Class Test: Quantity=%d>" % self.Quantity
...
>>> keys = 'a b c'.split()
>>> my_dict = {key: [Test(randint(0, 50)) for _ in range(3)] for key in keys}
>>> print("Before sorting:")
Before sorting:
>>> for key in keys:
... print("%s" % my_dict[key])
...
[<Class Test: Quantity=13>, <Class Test: Quantity=49>, <Class Test: Quantity=9>]
[<Class Test: Quantity=30>, <Class Test: Quantity=3>, <Class Test: Quantity=6>]
[<Class Test: Quantity=29>, <Class Test: Quantity=33>, <Class Test: Quantity=37>]
>>> for key in keys:
... my_dict[key].sort(key=lambda k: k.Quantity, reverse=True)
...
>>> print("After sorting:")
After sorting:
>>> for key in keys:
... print("%s" % my_dict[key])
...
[<Class Test: Quantity=49>, <Class Test: Quantity=13>, <Class Test: Quantity=9>]
[<Class Test: Quantity=30>, <Class Test: Quantity=6>, <Class Test: Quantity=3>]
[<Class Test: Quantity=37>, <Class Test: Quantity=33>, <Class Test: Quantity=29>]
>>>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.