处理dict的“键或值”参数的正确方法是什么?

2024-06-26 00:18:06 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一个对象是为了方便使用数组,并且有一些内部存储。你知道吗

假设我们有一个方法应该做些什么。例如,您可能需要将其输入“volume”。我认为这是相当直观的,您可能只想检查数据数组是否已经存在于内存中,或者使用调用函数时发送的数组。你知道吗

我很好奇这样做的标准方法是

a)完全不要这样做,有不同的callable

b)Try/Except或If/Else结构

c)dict.get(keyorarray, keyorarray)(它尝试寻找键,失败时返回对象)

示例:

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)。你知道吗

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


Tags: 对象方法selfgetdef数组直观dict
2条回答

我认为解决你问题的办法是:

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

我想你想要的是一个^{}。这允许您指定一个默认的factory callable,如果dict中不存在键,它将返回(例如)一个新的空列表;否则,它将返回找到的值。你知道吗

例如:

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]: []

相关问题 更多 >