根据键匹配将两个字典值相乘

时间:2019-07-16 10:44:22

标签: arrays python-3.x dictionary

我的词典列表为:

A=[{'a': 2, 'b': 3},{'a': 4, 'b': 5},{'b': 2,'c': 10,'d':8,'e': 9}]

B={'a':2,'b':3,'c':1,'d':8,'e':4}

所有我想将键A的值与键B的值相乘,如果键匹配,否则键的值将为零 预期:

C=[{'a': 4, 'b': 9'},{'a': 8, 'b': 15},{'b': 6,'c': 10,'d':64,'e': 36}]

我是这样的:

new_list=[]
for i in A:
    for k,v in i.items():
        for l,p in B.items():
            if k==l:
                new_d={k:v*p}
                new_list.append(new_d)

它似乎不起作用。我正在寻找列表理解方法!

3 个答案:

答案 0 :(得分:2)

使用嵌套列表/字典理解。使用dict.get()

例如:

A=[{'a': 2, 'b': 3},{'a': 4, 'b': 5},{'b': 2,'c': 10,'d':8,'e': 9}]
B={'a':2,'b':3,'c':1,'d':8,'e':4}

result = [{k: B.get(k, 0)*v for k, v in i.items() } for i in A]
print(result)

输出:

[{'a': 4, 'b': 9}, {'a': 8, 'b': 15}, {'b': 6, 'c': 10, 'd': 64, 'e': 36}]

答案 1 :(得分:0)

如果您想使用基本的for循环:

A=[{'a': 2, 'b': 3},{'a': 4, 'b': 5},{'b': 2,'c': 10,'d':8,'e': 9}]
B={'a':2,'b':3,'c':1,'d':8,'e':4}
C = []

for dict in A:
    d = {}
    for key,val in dict.items():
        d.update({key:dict[key] * B[key]})
    C.append(d)

print (C)

输出:

[{'a': 4, 'b': 9}, {'a': 8, 'b': 15}, {'b': 6, 'c': 10, 'd': 64, 'e': 36}]

等效于(列表理解):

C = [{key: (dict[key]*B[key] if key in B else 0) for key, value in dict.items()} for dict in A]

print (C)

输出:

[{'a': 4, 'b': 9}, {'a': 8, 'b': 15}, {'b': 6, 'c': 10, 'd': 64, 'e': 36}]

答案 2 :(得分:0)

尝试一下

>>> A=[{'a': 2, 'b': 3},{'a': 4, 'b': 5},{'b': 2,'c': 10,'d':8,'e': 9}]
>>> B={'a':2,'b':3,'c':1,'d':8,'e':4}
>>> [{key: (value*B[key] if key in B else 0) for key, value in d.items()} for d in A]
[{'a': 4, 'b': 9}, {'a': 8, 'b': 15}, {'b': 6, 'c': 10, 'd': 64, 'e': 36}]