我的词典列表为:
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)
它似乎不起作用。我正在寻找列表理解方法!
答案 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}]