Python: dict multiplication



我正在使用Python学习线性代数,我有两个字典:

v = {1: 1, 2: 8, 3: 0}

M = {(1, 2): 2, (3, 1): 1, (3, 3): 7, (2, 1): -1}

我想制作一个字典,添加所有元素,其中v中的键与M中元组的第一部分相同。我想要的两个字典的答案示例。(我会展示我想做的计算)

newDict = {1: 1*M[(1, 2)], 2: 8*M[(2, 1)], 3: 0*M[(3, 1)]+0*M[(3, 3)]

与相同

newDict = {1: 1*2, 2: 8*-1, 3: 0*1+3*7} 

所以我得到了形式的最后一本字典

newDict = {1:2, 2:-8, 3:0}

正如你所看到的,我想要与字典中相同的密钥。我得到的最接近的密钥是:

>>> [v[k]*M[r] for k in v for r in M if k == r[0]]
[2, -8]

我至少有正确的答案,但我无法做到这一点。我不知道从这里到哪里去,也不知道我是否在正确的轨道上。很抱歉,如果我的解释可能缺少

因为您的值基于多个输入键,所以请使用循环,而不是理解。使用collections.defaultdict对象也使逻辑简单了一点:

from collections import defaultdict
newDict = defaultdict(int)
for x, y in M:
    newDict[x] += M[x, y] * v.get(x, 0)

输出:

>>> from collections import defaultdict
>>> v = {1: 1, 2: 8, 3: 0}
>>> M = {(1, 2): 2, (3, 1): 1, (3, 3): 7, (2, 1): -1}
>>> newDict = defaultdict(int)
>>> for x, y in M:
...     newDict[x] += M[x, y] * v.get(x, 0)
... 
>>> newDict
defaultdict(<type 'int'>, {1: 2, 2: -8, 3: 0})

这个怎么样。。

newD = {k : 0 for k in v}
for k in v:
    for r in M:
        if k == r[0]: newD[k] += v[k]*M[r]

相关内容

  • 没有找到相关文章

最新更新