如何乘法元组?

2024-10-03 02:47:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我要乘一个元组。在

y = 0.1, 0.2, 0.2, 0.4, 0.1
x = {('S', 'A', 'C', 'T'): (0.2, 0.1, 0.9, 3, 4), ('S', 'C', 'T'): (0.4. 0.1, 0.3, 3,1)}

预期产量:

^{pr2}$

我的代码是:

from fuctools import partial:
res = {}
keys = list(set.keys())
vals = list(set.values())
mul = lambda x, y: x*y
for n in vals:
   res.extend(map(partial(mul, x), y))
res = dict(res)
print(res)   

但是它会导致一个错误:dict没有属性'extend'。在


Tags: 代码fromreskeyspartialdictlist元组
3条回答

这应该可以做到:

y = 0.1, 0.2, 0.2, 0.4, 0.1
x = {('S', 'A', 'C', 'T'): (0.2, 0.1, 0.9, 3, 4), ('S', 'C', 'T'): (0.4, 0.1, 0.3, 3,1)}

for k, v in x.items():
    x[k] = tuple(v[i] * y[i] for i in range(len(y)))

或者(正如Alex Hall在下面的评论中建议的那样),您可以使用zip函数,如下所示:

^{pr2}$

我建议用上面的方法代替你原来的方法。但是为了将来参考,您得到错误dict has no attribute 'extend'的原因是extend()是一个列表方法,而不是字典方法。当您试图调用res.extend()时,它将引发此异常,因为resdict,而不是list。如果要向dict添加多个键/值对,请使用^{}方法。在

我们可以跟着走

from itertools import starmap
import operator
final_dict = { key: list(starmap(operator.mul, zip(value, y))) for key, value in x.items() }
for key, value in final_dict.items():
   print(value)

您可以在dictcomp中使用函数starmap()和运算符mul

from itertools import starmap
from operator import mul

y = 0.1, 0.2, 0.2, 0.4, 0.1
x = {('S', 'A', 'C', 'T'): (0.2, 0.1, 0.9, 3, 4), ('S', 'C', 'T'): (0.4, 0.1, 0.3, 3, 1)}

{k: tuple(starmap(mul, zip(v, y))) for k, v in x.items()}
# {('S', 'A', 'C', 'T'): (0.020000000000000004, 0.020000000000000004, 0.18000000000000002, 1.2000000000000002, 0.4), ('S', 'C', 'T'): (0.04000000000000001, 0.020000000000000004, 0.06, 1.2000000000000002, 0.1)}

或者,您可以使用numpy.multiply()

^{pr2}$

相关问题 更多 >