单行基于两个字典计算分数
我有下表的值:
scores = {
"proxy": 300,
"vpn": 500,
"tor": 900,
"recent_abuse": 1000,
}
和这个带有布尔值的数据
data = {
"proxy": False,
"vpn": True,
"tor": False,
"recent_abuse": False,
}
我想知道是否可以在一行中(可能使用 itertools)计算一个基于 data
我目前的代码是这样的:
if data["proxy"]:
score += 300
if data["vpn"]:
score += 500
if data["tor"]:
score += 900
if data["recent_abuse"]:
score += 1000
回答
total = sum(scores[k] for k, v in data.items() if v)
更好的名称k:field_name。v:field_value。
我是这样推导出来的:
total = 0
for k, v in data.items():
if v:
total += scores[k]
从那里很容易将它折叠成一条线。
回答
您可以使用列表生成器:
scores = {
"proxy": 300,
"vpn": 500,
"tor": 900,
"recent_abuse": 1000,
}
data = {
"proxy": False,
"vpn": True,
"tor": False,
"recent_abuse": False,
}
score = sum(scores[x] for x in scores if data.get(x, False))
print(score)
出去:
500