单行基于两个字典计算分数

我有下表的值:

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)

更好的名称kfield_namevfield_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


以上是单行基于两个字典计算分数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>