首页 > 解决方案 > 从集合中检索值

问题描述

我正在处理一个涉及很多对象的问题 (B)。初始化这些对象时会执行大量计算,具体取决于它们的某些属性。由于这组属性(在数学意义上)通常由这些对象共享,因此我将属性本身包装在另一个对象 (C) 中,从而实现了很好的加速,因为每个不同的 C 只执行一次计算。

我的 B 列表保存在对象 A 中,负责它们的初始化。每个 B 都有一个对 C 的引用,而 A 持有不同 Cs (c_set) 的 (pythonic) 集。当我向 A 添加一个新的 B 时,我检查它的 C 是否存在于 c_set 中(哈希仅取决于输入参数);如果是这样,我将这个新的 B 的 C 属性更改为集合中存在的版本,该版本已经正确初始化。就像是:

class A:
    def add_b(self, b: B):
        if b.c in self.c_set:
            for c in self.c_set:
                if c is b.c:
                    break
            b.c = c
        else:
            self.initialize(c, other_params)  # the heavy bit
            self.c_set.add(c)
        self.b_list.add(b)

它工作正常,但我对从集合中“挽救”现有值的方式并不完全满意。我想知道我在这里所做的事情是否有替代结构,基本上是从一组中获取一个值。我的第二个想法是使用值与键相同的字典;所以我可以写c = c_dict[c],但似乎有点过头了!

我不知道其他不太常见的数据结构是否适合我的用例。

标签: pythonsetcontainers

解决方案


推荐阅读