两个不同字典之间的相乘

时间:2020-07-13 17:14:38

标签: python python-3.x

我正在尝试使两个字典相乘:

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'

2 个答案:

答案 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 keyv 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