2 回答
TA贡献1811条经验 获得超5个赞
Python确实有一个三元运算符,如Lua和许多其他语言
但与Lua不同的是,Python不会将未定义的变量作为“false”值处理,如果您尝试计算未定义的变量,它将引发错误。特别是在您的情况下,您将收到密钥不存在的密钥错误。ticker
路亚三元:
total_volume[ticker] = (total_volume[ticker] or 0) + a
蟒蛇等效物:
total_volume[ticker] = (total_volume[ticker] if ticker in total_volume else 0) + a
如果 Lua 将把 if 之前的值传递给你,python 将把后面的语句在 的时候之前传递给你,而当它是 。or
truthy
if
true
else
false
为了安全地评估密钥是否在字典中,我们可以使用 。in
这主要是为了演示您在Lua中使用的三元运算以及如何在Python中执行此操作,但这并不意味着它是解决此问题的正确工具。
我建议一个更干净的解决方案:
total_volume[ticker] = total_volume.get(ticker, 0) + 1
它更少的代码,更容易推理。 将返回,或者如果字典中不存在该键,它将返回默认值 。get
total_volume[ticker]
0
TA贡献1784条经验 获得超8个赞
对于您的用例,我建议使用:defaultdict
from collections import defaultdict
d = defaultdict(int)
d["counter"] += 5
print(d.items()) # output: dict_items([('counter', 5)])
但是——
我不认为这是一个好的做法,但你可以在所需的范围内使用或动态访问变量:locals()globals()
a = 1
print(locals().get("a")) # ouput:1
c = locals().get("c", 2) + 1
print(c) # output 3
添加回答
举报