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

标签 python object dictionary

我有一个存储在字典中的对象集合,我想检索特定属性的最大值。对象是 cookies ​​(想想巧克力片),每个 cookies 都有自己的温度、热容量、批号等。批号描述了它与哪一组 cookies 一起离开 toastr 。

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

最佳答案

您可以只对值使用最大值:

mx_batch =  max(cookies.values(), key=operator.attrgetter('batch')).batch

或者只使用类属性来保持最大值:

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

关于python - 在字典中查找对象属性的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39055550/

相关文章:

python - Dask agg函数 pickle 错误

javascript - 如何将对象转换为字符串

java - 访问成员变量与创建新对象

java - O(1) 中的 value.contains(object) 的高效 java 映射?

ios - Swift:无法将类型 '__NSCFArray' 的值转换为 'NSDictionary'

python - 是否有 scipy/numpy 方法来获取最近插值的索引?

python - 用于在 Python 中录制音频的 Tkinter 启动/停止按钮

python - 循环矩阵元素时出现索引错误

python - 在python中的类中创建对象

python - 来自 Pandas 数据框的嵌套字典