如何遍历Python字典并按指定格式写入JSON文件?
问题分析与解决
核心问题
你只创建了一个字典对象,循环时不断修改它的name和追加技能,最后自然只剩最后一个用户(Ben)的数据,而且所有技能都堆在这个字典里了。另外代码还有几个语法和逻辑错误:
- 内层循环用
skills当变量名,覆盖了外层的skills变量,逻辑会混乱 for tag in tag是无效循环,应该遍历每个技能对应的等级列表- 你想要的输出格式不符合JSON规范,同一个JSON对象不能有重复的
name键,正确结构应该是用户对象组成的数组
修正后的代码
import json persons = {'Tom': {'reading': ['excellent'], 'writing': ['B1', 'B2']}, 'Ben': {'reading': ['excellent'], 'writing': ['B2']}} # 用列表存储所有用户数据,避免覆盖 result = [] for name, user_skills in persons.items(): # 每次循环创建新的用户字典,确保每个用户数据独立 user_dict = {'name': name, 'skills': []} for skill_name, levels in user_skills.items(): # 遍历当前技能下的所有等级 for level in levels: skill_str = f'{skill_name}#{level}' user_dict['skills'].append(skill_str) result.append(user_dict) # 写入JSON文件 with open('vms1.json', 'w') as jfile: json.dump(result, jfile, indent=2)
最终生成的JSON内容
[ { "name": "Tom", "skills": [ "reading#excellent", "writing#B1", "writing#B2" ] }, { "name": "Ben", "skills": [ "reading#excellent", "writing#B2" ] } ]
这个结构既符合JSON规范,又实现了每个用户对应自身技能的需求。
内容的提问来源于stack exchange,提问作者dilbar
相关产品推荐
相关产品推荐

