Python如何实现两个字典同键对应值相乘并输出结果
问题说明
现有两个存储演唱会信息的字典:
AvailConcertSeats = {"The Weeknd": 80000, "Maroon 5": 80000, "Justin Bieber": 80000, "Post Malone": 34000} AvgConcertPrice = {"The Weeknd": 200, "Maroon 5": 109, "Justin Bieber": 250, "Post Malone": 179}
需求是计算并输出两个字典中同键对应值的乘积,直接运行以下尝试的代码无法得到预期结果,需要正确的实现方案:
AvailConcertSeats.values() * AvgConcertPrice.values()
错误原因
dict.values() 返回的是字典值的视图对象,本身不支持直接和另一个视图对象做乘法运算,直接执行会抛出类型错误;同时这种写法也没有做键的匹配,即使能运算也无法保证是同键的值配对相乘。
实现方案
优先使用键交集遍历的方式,自动适配两个字典键不完全一致的场景,不会出现键不匹配的计算错误:
# 初始化结果字典 total_concert_revenue = {} # 取两个字典的公共键遍历 for singer in AvailConcertSeats.keys() & AvgConcertPrice.keys(): total_concert_revenue[singer] = AvailConcertSeats[singer] * AvgConcertPrice[singer] print(total_concert_revenue)
运行输出结果:
{'The Weeknd': 16000000, 'Maroon 5': 8720000, 'Justin Bieber': 20000000, 'Post Malone': 6086000}
如果偏好简洁写法,可以用字典推导式实现完全相同的逻辑:
total_concert_revenue = { singer: AvailConcertSeats[singer] * AvgConcertPrice[singer] for singer in AvailConcertSeats.keys() & AvgConcertPrice.keys() }
注意:如果用
zip直接配对两个字典的values()计算,必须保证两个字典的键完全一致、且在Python3.7+版本下键的插入顺序完全相同,否则会出现值错位配对的错误,非特殊场景不推荐使用。
内容的提问来源于stack exchange,提问作者HelpMeCode
相关产品推荐
相关产品推荐

