我正在尝试使两个字典相乘:
quantita_materiale={'140cm* 2cm': [1.0]}
prezzo_materiale={'140cm* 2cm': [100.0], '70cm* 2cm': [100.0],}
我想获得一个result
变量作为两个字典之间匹配的所有键的乘法。
我尝试获取以下代码:
result={k : v * prezzo_materiale[k] for k, v in quantita_materiale.items() if k in prezzo_materiale}
但是python给了我以下错误:
can't multiply sequence by non-int of type 'list'
答案 0 :(得分:1)
result={k : v[0] * prezzo_materiale[k][0] for k, v in quantita_materiale.items() if k in prezzo_materiale}
当您尝试获得
k, v for quantita_materiale.items()
,您将获得k is str key
和v is a list containing 1 number
,因此,如果要访问号码,则需要获取列表的第一项v[0]
,对于prezzo_materiale[k]
这会给你一个
result = {
'140cm* 2cm': 100.0
}
是否要获得相同的结果(list of integer
)?您需要使用以下代码:
result={
k : [v[0] * prezzo_materiale[k][0]] for k, v in quantita_materiale.items() if k in prezzo_materiale
}
它将返回
result = {
'140cm* 2cm': [100.0]
}
答案 1 :(得分:1)
您正在尝试使用带有列表的字符串。那肯定会给出运行时错误。您应该按照以下步骤进行操作-
quantita_materiale={'140cm* 2cm': [1.0]}
prezzo_materiale={'140cm* 2cm': [100.0], '70cm* 2cm': [100.0],}
result={k : v[0] * int(prezzo_materiale[k][0]) for k, v in quantita_materiale.items() if k in prezzo_materiale}
print(result)
print("total - ",total)
输出:
{'140cm* 2cm': 100.0}
total - 100.0
仅当您的值在列表中只有1个元素时,上述方法才有效。但是,如果您希望它适用于具有包含多个元素的列表的值,则可以使用以下代码-
quantita_materiale={'140cm* 2cm': [1.0,2.0]}
prezzo_materiale={'140cm* 2cm': [100.0,200.0], '70cm* 2cm': [100.0],}
result ={}
for k in quantita_materiale.keys():
if k in prezzo_materiale:
result[k] = [v1*v2 for v1,v2 in zip(quantita_materiale[k],prezzo_materiale[k])]
print(result)
total = sum(sum(result.values(),[]))
print("total",total)
输出:
{'140cm* 2cm': [100.0, 400.0]}
total 500.0
请注意:
如果输入的键的值在列表中包含多个元素,则答案的第一个版本将不起作用。因此,我的答案的第二版也适用于以下输入-
输入:
quantita_materiale={'140cm* 2cm': [1.0,2.0],'70cm* 2cm':[5.0]}
prezzo_materiale={'140cm* 2cm': [100.0,200.0], '70cm* 2cm': [100.0]}
输出:
{'140cm* 2cm': [100.0, 400.0], '70cm* 2cm': [500.0]}
total 1000.0