如何用Python的range函数为字典列表添加唯一id键?
为JSON列表元素添加唯一ID的代码修正
问题背景
原始JSON文件内容:
[ {"name": "Saeed"}, {"name": "Joseph"}, {"name": "Mary"}, {"name": "Peter"} ]
需求:遍历该列表,为每个字典添加名为id的键,值需唯一且按name排序后的顺序从1到4递增。
现有错误代码
import json with open('db.json', 'r') as file: data = json.load(file) data.sort(key=lambda x: x['name']) for i in range(1, len(data) + 1): for d in data: d['id'] = i break
当前错误输出
{'name': 'Joseph', 'id': 4} {'name': 'Mary'} {'name': 'Peter'} {'name': 'Saeed'}
期望输出
{'name': 'Joseph', 'id': 1} {'name': 'Mary', 'id': 2} {'name': 'Peter', 'id': 3} {'name': 'Saeed', 'id': 4}
错误原因分析
现有代码嵌套两层循环:外层循环i从1到4,每次进入内层循环后仅修改data的第一个元素的id(赋值后立刻break跳出内层循环),导致最后第一个元素的id被覆盖为4,其余元素完全未被处理。
修正后的代码
import json with open('db.json', 'r') as file: data = json.load(file) # 按name字段排序 data.sort(key=lambda x: x['name']) # 遍历排序后的列表,为每个元素添加从1开始的唯一id for idx, item in enumerate(data, start=1): item['id'] = idx # 打印验证结果 for item in data: print(item)
代码说明
使用enumerate(data, start=1)可同时获取从1开始的索引和列表中的每个元素,直接为每个字典赋值id=idx,既保证了id的唯一性,又能按排序后的顺序生成连续的id值。
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

