有没有办法在初始化主体中使用一行并使用dict键" a"来引用dict键。和" b"
示例:
def func(a,b)
return {"a":longComputation1(), "b":longComputation2(), sum_a_b:?????}
请不要更改代码的semanthics。这只是一个例子。
答案 0 :(得分:2)
简答:不。
这必须在多行上完成:
def func():
d = {"a": longComputation1(),
"b": longComputation2()}
d.update(sum_a_b = d['a'] + d['b'])
return d
答案 1 :(得分:2)
使用功能参数:
>>> def func(a, b):
... return {"a": a, "b": b, "sum_a_b": a + b}
...
>>> func(1, 2)
{'a': 1, 'b': 2, 'sum_a_b': 3}
更新我发布上述代码后问题发生了变化;使用jonrsharpe的解决方案。
答案 2 :(得分:1)
使用函数创建dict并在名为sum的键中定义总和的键名称:
def sum_dict(**kwargs):
result = {}
total = 0
sum_keys = kwargs["sum"]
del kwargs["sum"]
for key, value in kwargs.items():
val = value()
result[key] = val
if key in sum_keys:
total += val
result["sum_" + "_".join(sum_keys)] = total
return result
print(sum_dict(a=lambda: 3,b=lambda: 2,c=lambda: 14, sum=["a", "b"]))
# {'a': 3, 'c': 14, 'b': 2, 'sum_a_b': 5}
无法从未创建的dict访问密钥。
另一种方法是创建一个自己的dict类。
答案 3 :(得分:0)
我想知道它的实际应用是什么,但如果你的意思是密钥是在初始化时从字典中已存在的其他密钥动态构造的:
d = {"a":longComputation1(), "b":longComputation2()}
d['_'.join(['sum'] + d.keys())] = sum(d.values()) # assumes that keys are strings
>>> d
{'a': 10, 'b': 20, 'sum_a_b': 30} # assuming that longComputation1() == 10 and longComputation2() = 20
很抱歉这不是一行(为什么是约束?),但AFAIK在初始化期间无法引用dict的密钥。