python - 如何更改Python字典中的键

标签 python

这是我的代码:

def vmm(v, M):
    d = {}
    domain = [(i,j) for i in M.D[0] for j in M.D[1]]
    for k in M.D[1]:
        for i in domain:
            if i[1] == k:
                f = 0
                f += M[i]*v[i[0]]
                d[i] = f
    return d

它返回:

{(3, 'b'): 0, (3, 'a'): 0, (1, 'b'): 2, (2, 'a'): -8, (3, 'c') '): 0, (2, 'b'): 0, (2, 'c'): 0, (1, 'a'): 0, (1, 'c'): 0}

这几乎是我想要的,我希望每个键成为元组的第二个元素,所以它们的键将是“a”、“b”或“c”,其中值是所有值的总和以“a”、“b”、“c”作为第二个元素的值。

我尝试将 return 语句之前的最后一行替换为:

d[1][i] = f

这会返回一个所有值都为零的字典,这不是我想要的。

编辑

def vector_matrix_mul(v, M):
    d = {}
    e = {}
    domain = [(i,j) for i in M.D[0] for j in M.D[1]]
    for k in M.D[1]:
        for i in domain:
            if i[1] == k:
                f = 0
                f += M[i]*v[i[0]]
                d[i] = f
    for i in d: 
        for m in M.D[1]: #{'a', 'b', 'c'}
            if i[1] == m:
                for k in M.D[0]:
                    F = 0
                    F += i[m,k]
                    e[m] = F
    return e  

仍然不走运,如果有人可以帮助我解决这个问题,我不想使用额外的模块,只想修复我的代码。

M = Mat(M.D,M.f)
v = Vec(v.D,v.f)

所以 M.D 是矩阵的“域”,M.f 是矩阵的函数。 与向量类似。

一个例子...

>>> v1 = Vec({1, 2, 3}, {1: 1, 2: 8})
>>> M1 = Mat(({1, 2, 3}, {'a', 'b', 'c'}), {(1, 'b'): 2, (2, 'a'):-1, (3, 'a'): 1, (3, 'c'): 7})

注意 v 和 M 域中的不同维度。

最佳答案

使用默认字典,使用元组中的键并对每个值求和:

from collections import defaultdict
d=defaultdict(int)

domain = zip(M.D[0], M.D[1])
for vl, k in domain:
    d[k] +=  M[(vl,k)] * v[vl]

我不明白 for k in M.D[1] 会出现在哪里,因为您的域列表中已经拥有所有 M.D[1] 项目。

关于python - 如何更改Python字典中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018855/

相关文章:

python - 递归使用Scrapy从网站上抓取网页

Python从文件导入数据到字典并比较数据

python - 在 Windows 7 x64 上使用 pgxnclient 时找不到 pg_config 可执行文件

Python-使用日期创建月份的周数列表

python - 尝试找到所有满足 f(x,y) = 0 且 g(x,y) = 0 的有序对 (x,y);即,我试图找到多变量函数的根

python - tensorflow sess.run 返回 List 而不是 float32 导致 TypeError : unsupported operand type(s) for +=: 'float' and 'list'

python - Pandas hub_table 用 0 aggfunc ='sum' 替换 nan

python - 如何在 python 中使用循环进行正确的转换?

python - Pandas 在 groupby 之后获取所有行的最小值和最大值

python - 如何计算前 x 行中特定字符串的出现次数