首页 > 解决方案 > 如何乘以一个元组?

问题描述

我想乘以一个元组。

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)}

预期输出:

res = {('S', 'A', 'C', 'T'): (0.02, 0.02, 0.18, 1.2, 0.4), ('S', 'C', 'T'): (0.04. 0.02, 0.06, 1.2, 0.1)}

我的代码是:

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'

标签: pythontuplesmultiplication

解决方案


这应该可以解决问题:

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函数:

for k in x.keys():
    x[k] = tuple(a[0] * a[1] for a in zip(y, x[k]))

我建议使用上述方法之一,而不是您原来的方法。但为了将来参考,您收到错误的原因dict has no attribute 'extend'是这extend()是一种用于列表的方法,而不是用于字典的方法。当您尝试调用res.extend()它时会抛出此异常,因为它res是 a dict,而不是 a list。如果要将多个键/值对添加到 dict,请使用该update()方法。


推荐阅读