You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:23:13