Python for循环同时遍历两个嵌套字典报错的解决方法
问题根因
你写的循环存在两个核心问题:
- 迭代语法错误:
for columnName,columnData in dict2.items(),dict1.items():写法会将两个字典的items对象打包为元组遍历,第一次迭代仅读取dict2的内容,第二次仅读取dict1的内容,无法在单次循环中同时获取两个字典的同名列数据,直接触发键不存在的报错。 - 取值逻辑错误:两个字典的内层键类型完全不匹配,dict1内层键是收入区间文本,dict2内层键是数字ID,直接用相同key跨字典取值本身不成立。

正确实现方案
两个字典外层的列名完全一致,先提取dict1中按定义顺序排列的收入文本列表,再将dict2中的数字ID按对应计数值降序排序,按顺序一一配对即可完成映射。
# 遍历两个字典共有的外层列名 for col in dict1.keys(): # 提取dict1中按原有顺序排列的收入区间文本 income_texts = list(dict1[col].keys()) # 将dict2中的数字键按对应数值从大到小排序 sorted_num_keys = [k for k, v in sorted(dict2[col].items(), key=lambda item: -item[1])] # 构建数字键到收入文本的映射 res = {} for i, num_key in enumerate(sorted_num_keys): res[num_key] = income_texts[i] # 更新dict2 dict2[col] = res
效果说明
运行后dict2的输出完全匹配预期格式:
'Please select your father/guardian monthly Income from these options.': { 1: 'Between 25k to 50k', 2: 'Between 75k to 100k', 3: 'Between 50k to 75k', 4: 'Between 100k to 150k', 7: 'Between 150k to 200k', 10: 'Between 200k to 250k', 8: "Father don't do any job", 5: 'Between 10k to 25k', # 其余数字键按排序顺序匹配对应收入区间 }
内容的提问来源于stack exchange,提问作者Hammad Shahzad
相关产品推荐
相关产品推荐

