gpt4 book ai didi

python - 使用 eval 对列表求和

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:05 25 4
gpt4 key购买 nike

我有一个这样的列表

yy = ['A1', 'B1', 'C1']

A1B1C1 的值在这样的字典中

ff = {
'A1': 10,
'B1': 20,
'C1': 30
}

现在我想用 ff 中的值对列表求和。这是我尝试做的

p = "sum(lst)"

eval(p, {'lst': yy}, ff)

但我得到 TypeError: unsupported operand type(s) for +: 'int' and 'str'。在调试过程中,我发现如果我这样做,p = "sum([A1, B1, C1])" 和 eval 它会起作用。不确定为什么会这样?

完整代码:

ff = {
'A1': 10,
'B1': 20,
'C1': 30
}


yy = ['A1', 'B1', 'C1']

p = "sum(lst)"

eval(p, {'lst': yy}, ff)

我知道eval 的结果。我在到达 eval

之前过滤所有内容

最佳答案

你必须使用eval吗? ?

为什么不使用 sum() ;

yy = ['A1', 'B1', 'C1']

ff = {
'A1': 10,
'B1': 20,
'C1': 30
}

print sum([ff[key] for key in yy])

如果你真的需要使用eval ,这里是怎么做的:

print eval('+'.join(str(ff[key]) for key in yy))
# or for short
print eval("+".join(yy), globals=ff)

# or the way you are doing
print eval("sum(lst)", {'lst': [ff[key] for key in yy]})

您收到 TypeError 的原因是因为"sum(lst)"本质上是 sum(['A1', 'B1', 'C1']) ,Python 不知道如何处理。通过更改 lst[ff[key] for key in yy]我们正在制作一个新列表,其中包含 yy 引用(按键)的数字在ff

我看到你的评论了:

I am using eval to parse Excel formulas like this one '=SUM(AY92:BI92)/SUM(AL92:AX92)' where I first expand the list from Ay92 to BI92 and then do a sum using eval

为什么不获取 AY92:BI92 的值?放入列表和 AL92:AX92 的值中进入第二个列表,他们使用 sum(lst1)/sum(lst2) ? eval 很讨厌,如果这个 excel 文件在单元格内部包含恶意代码,它就会运行。

关于python - 使用 eval 对列表求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32288942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com