我有一个存储在字典中的对象集合,我想要检索特定属性的最大值。对象是饼干(想想巧克力片),每个饼干都有自己的温度,热容量,批号等。批号描述了它从烤箱中取出的饼干集。
class Cookie:
def __init__(self, density, specificheat, batch):
self.rho = density
self.cp = specificheat
self.batch = batch
self.volume = 1.2e-5 # m^3
self.surfarea = 4.9e-3 # m^2
...
我想在字典中找到最大批号。我知道如果我使用列表,这将很简单,我可以使用operator.attrgetter(' batch')对列表进行排序并获取值。但是,使用字典时,此行不起作用:
sorted(cookies, key=operator.attrgetter('batch'))
我可以设置一个for循环并浏览字典中的每个对象,但我觉得有更好的方法可以做到这一点。我想避免切换到列表,因为我正在运行优化将cookie排序到框中,当你不得不担心2000个cookie时,从字典中检索数据比从列表中检索数据要快。 (我用timeit()计时它。我在Stackoverflow上寻找类似的问题,但大多数似乎是在javascript中。我发现的Python问题是用于不存储像我这样的对象的字典。任何帮助将不胜感激!
答案 0 :(得分:1)
您可以在值上使用max:
mx_batch = max(cookies.values(), key=operator.attrgetter('batch')).batch
或者只使用class属性来保持最大值:
class Cookie:
mx = 0
def __init__(self, density, specificheat, batch):
self.rho = density
self.cp = specificheat
self.batch = batch
self.volume = 1.2e-5 # m^3
self.surfarea = 4.9e-3 # m^2
if batch > Cookie.mx:
Cookie.mx = batch
然后:
In [9]: c1 = Cookie(1, 120, 1)
In [10]: c2 = Cookie(2, 120, 4)
In [11]: c3 = Cookie(1, 120, 2)
In [12]: c4 = Cookie(1, 120, 1)
In [13]: print(Cookie.mx)
4
答案 1 :(得分:0)
这是一种方法
# where objs is your dictionary of cookies
max(map(lambda i: objs[i].batch, objs))