嵌套字典符号值替换为数字及多字典同键值求和方法
Python嵌套字典值替换+同键求和实现
先给出待处理的原始字典结构:
car_info = { "car1": {"engine": "+", "paint": "0", "transmission": "-"}, "car2": {"engine": "-", "paint": "+", "transmission": "0"} }
1. 符号值转对应数字
不用写多分支判断,先定义好符号和数字的映射关系,遍历字典做批量替换即可:
# 符号-数字映射规则 score_map = {"+": 1, "-": -1, "0": 0} processed = {} for car, parts in car_info.items(): # 字典推导式直接生成替换后的子字典 processed[car] = {k: score_map[v] for k, v in parts.items()}
替换完成后processed的输出如下,所有符号值都已经转为对应整数:
{ 'car1': {'engine': 1, 'paint': 0, 'transmission': -1}, 'car2': {'engine': -1, 'paint': 1, 'transmission': 0} }
2. 子字典同键数值求和
逻辑很简单,先初始化和子字典键一致、初始值为0的汇总字典,再遍历所有条目累加对应键的数值即可:
# 取第一个子字典的键初始化汇总结构,不用硬编码键名 total = {k: 0 for k in next(iter(processed.values())).keys()} for part_scores in processed.values(): for part, score in part_scores.items(): total[part] += score
最终得到的汇总结果:
{'engine': 0, 'paint': 1, 'transmission': -1}
如果不需要保留替换后的全量字典,也可以边转值边累加,减少内存占用,数据量大的时候更高效:
score_map = {"+": 1, "-": -1, "0": 0} total = {} for part_scores in car_info.values(): for k, v in part_scores.items(): total[k] = total.get(k, 0) + score_map[v]
运行结果和分步实现完全一致,后续新增car3、car4等条目时代码也不需要修改,自动适配。
内容的提问来源于stack exchange,提问作者Py-enthusiast
相关产品推荐
相关产品推荐

