处理字典"key or value"论点的正确方法是什么?



假设我们有一个对象,目的是为了方便数组的使用,并且有一些内部存储空间。

假设我们有一个应该做某事的方法。例如,你可能需要喂它"音量"。我认为这是相当直观的,你可能只是想检查数据数组是否已经存在于内存中,否则使用调用函数时发送的数组。

我很好奇这样做的标准方式是否为

a)不要这样做,使用不同的可调用对象 b) Try/Except或If/Else结构

c) dict.get(keyorarray, keyorarray)(尝试key,如果失败则返回对象)

的例子:

class Spheres(object):
    def __init__(self):
        self._dict = dict()
    def volumes(self, radii='radii'):
        return (4/3) * math.pi * self._dict.get(radii, radii)**3

这个想法是,我可以手动处理我的数组,在脚本的命名空间中跟踪它们,或者在某些情况下,我可以将它们嵌入到对象中(即:spheres['radii'] = radii),然后而不是调用spheres.volumes(spheres['radii']),我可以调用spheres.volumes()spheres.volumes(radii)

基本上我想提供这个选项,但如果用户在对象中存储了一堆向量,我想让算法变得"聪明",只使用它们已经可用的数据。

我认为你想要的是defaultdict。这允许你指定一个默认的工厂可调用对象,它将返回(例如)一个新的空列表,如果一个键不存在于字典中;否则,它将返回找到的值。

例如:

In [1]: from collections import defaultdict
In [2]: example = defaultdict(list)
In [3]: example['foo']
Out[3]: []
In [4]: example['foo'] += [1, 2, 3, 4, 5]
In [5]: example['foo']
Out[5]: [1, 2, 3, 4, 5]
In [6]: example['bar']
Out[6]: []

我认为你的问题的python解决方案是:

class Spheres(object):
    def __init__(self):
       self._dict = dict()
    def volumes(self, radii=None):
        if radii is None: 
            radii = self._dict['radii']
        return (4/3) * math.pi *radii**3

相关内容

最新更新