查找字典中对象属性的最大值

时间:2016-08-20 15:04:03

标签: python object dictionary

我有一个存储在字典中的对象集合,我想要检索特定属性的最大值。对象是饼干​​(想想巧克力片),每个饼干都有自己的温度,热容量,批号等。批号描述了它从烤箱中取出的饼干集。

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问题是用于不存储像我这样的对象的字典。任何帮助将不胜感激!

2 个答案:

答案 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))