访问密钥的值

T-8*_*800 0 python dictionary

我有一个字典,如:

Data = {
    "weight_factors" : {
        "parameter1" : 10,
        "parameter2" : 30,
        "parameter3" : 30
        },
    "other_info" : {
        }
}
Run Code Online (Sandbox Code Playgroud)

我想获得密钥下所有值的总和"weight_factors":

sum = Data["weight_factors"]["parameter1"] + 
      Data["weight_factors"]["parameter2"] + 
      Data["weight_factors"]["parameter3"] 
Run Code Online (Sandbox Code Playgroud)

目前,为了避免Data["weight_factors"]重复输入,我使用以下命令:

d = Data["weight_factors"]
d["parameter1"] + d["parameter2"] + d["parameter3"]
Run Code Online (Sandbox Code Playgroud)

但是,我想应该有一个运算符执行相同的操作,而不存储Data["weight_factors"]为中间变量.我想知道这样的命令或操作员是否存在.

Data["weight_factors"]<unknown operator>(["parameter1"] + 
                                         ["parameter2"] +
                                          ... 
                                         ["parametern"])<unknown operator>
Run Code Online (Sandbox Code Playgroud)

编辑: 在上面给出的例子中,它只是一个求和操作.但它可以是例如:

Data["weight_factors"]["parameter1"] * Data["weight_factors"]["parameter2"] + Data[??"weight_factors"]["parameter3"]
Run Code Online (Sandbox Code Playgroud)

但我不想Data["weight_factors"]反复输入.这就是我要搜索的东西......我不知道这样的运算符是否存在.(在MATLAB中,存在用于单元结构的东西).

iCo*_*dez 5

不,内置的dict类型不存在这种运算符.

我想你可以创建自己的dict类型继承并重载运dict算符:

class MyDict(dict):
    def __add__(self, other):
        """Overload the + operator."""
...
Run Code Online (Sandbox Code Playgroud)

但这有点低效,对可读性不是很好.

如果您只想对值求和,可以使用sumdict.values(dict.itervalues如果您使用的是Python 2.x):

>>> Data = {
... "weight_factors" : {
...     "parameter1" : 10,
...     "parameter2" : 30,
...     "parameter3" : 30
...     },
... "other_info" : {
...     }
... }
>>> sum(Data["weight_factors"].values())
70
>>>
Run Code Online (Sandbox Code Playgroud)

否则,我会使用你现在拥有的东西:

d = Data["weight_factors"]
myvar = d["parameter1"] * d["parameter2"] + d["parameter3"]
Run Code Online (Sandbox Code Playgroud)

它尽可能干净,高效.