我有一个字典,如:
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中,存在用于单元结构的东西).
不,内置的dict类型不存在这种运算符.
我想你可以创建自己的dict类型继承并重载运dict算符:
class MyDict(dict):
def __add__(self, other):
"""Overload the + operator."""
...
Run Code Online (Sandbox Code Playgroud)
但这有点低效,对可读性不是很好.
如果您只想对值求和,可以使用sum和dict.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)
它尽可能干净,高效.