gpt4 book ai didi

python - 对任意多个字典和数字进行数学运算

转载 作者:行者123 更新时间:2023-11-28 18:56:22 25 4
gpt4 key购买 nike

我想做以下事情:

  • 接受任意数量的字典或数字参数
  • 作为字典的参数,检查它们是否都具有相同的键(否则错误)
  • 做类似的事情
    for key in dict:
out[key] = product(dict1[key],number2,dict2[key],etc.)

如果一个参数是一个数字,它会假装“好像”它是一个字典,该数字作为每个键的值。 (当然,这也可以是 sum 而不是 product)。

理想情况下,这将是一个库,但我可以使用手写函数。到目前为止,我还没有写出任何适用于两个以上参数的东西。

例如,假设我的输入是:

a = {
'Burkina' : 100,
'Chad': 50
}

b = 2

对于两个参数,我认为这是可行的:

def p(a,b):
out = {}
try:
for key in a:
try:
out[key] = a[key]*b[key]
except TypeError:
out[key] = a[key]*b
except TypeError:
for key in b:
try:
out[key] = a[key]*b[key]
except TypeError:
out[key] = a*b[key]
for key in out:
print(key,out[key])

但是这种方法需要越来越长的函数来处理更多的参数。所以那是不对的。然后我尝试用 *args 来做到这一点:

def p(*args):
out = {}
for arg in args:
try:
for key in arg:
try:
out[key] = a[key]*b[key]
except TypeError:
out[key] = a[key]*b
except TypeError:
for key in args:
try:
out[key] = a[key]*b[key]
except TypeError:
out[key] = a*b[key]
for key in out:
print(key,out[key])

但这出现了 TypeErrors,我的头开始晕了。

编辑添加:如果所有输入都是数字,我想返回一个数字。

谢谢!

最佳答案

最好使用 isinstance 而不是处理异常来检查参数是数字还是字典:

def func(*args):
out = {}
factor = 1
for arg in args:
if isinstance(arg, dict):
if not out:
out = arg.copy()
elif out.keys() != arg.keys():
raise KeyError('not same keys')
else:
for key in out:
out[key] *= arg[key]
else:
factor *= arg
for key in out:
out[key] *= factor
if out:
return out
return factor


print(
func(
{'key1': 1, 'key2': 2},
3,
{'key1': 10, 'key2': 20},
4
)
)

print(func(2, 3))

# result:
# {'key1': 120, 'key2': 480}
# 6

关于python - 对任意多个字典和数字进行数学运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58047709/

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