3 回答

TA贡献1843条经验 获得超7个赞
正如其他答案所述,我认为答案是“否”,但这是我到目前为止获得的最接近的答案...
虽然它稍微有点在“ wtf”的“令人讨厌”的一面
a = True
b = False
c = True
d = False
obj = {
**({"do_a": "args for a"} if a else {}),
**({"do_b": "args for b"} if b else {}),
**({"do_c": "args for c"} if c else {}),
**({"do_d": "args for d"} if d else {}),
}
#expect:
assert(obj == {
"do_a": "args for a",
"do_c": "args for c",
})
或者,如果您想在某些函数中添加可选性,请执行以下操作:
def maybe(dictionary, condition, default=None):
return dictionary if condition else default or {}
obj = {
**maybe({"do_a": "args for a"}, a),
**maybe({"do_b": "args for b"}, b),
**maybe({"do_c": "args for c"}, c),
**maybe({"do_d": "args for d"}, d),
}
这种代码的问题在于条件离结果越来越远(可以想象,我们最终将大字典传递给中的第一个参数maybe)。
添加回答
举报