如何在 Python 中使用 range 函数为字典列表批量添加带序号的新键
发布时间 - 2026-01-08 00:00:00 点击率:次本文详解如何正确使用 `range()` 或更简洁的计数方式,为 json 解析后的字典列表中每个元素动态添加唯一 `id` 键,并避免常见索引覆盖错误。
在处理结构化数据(如从 JSON 文件加载的字典列表)时,常需为每条记录注入唯一标识符(如 id)。一个典型误区是嵌套循环配合 range()——
正如问题中所示:外层用 range(1, len(data)+1),内层再遍历 data 并仅对首个元素赋值 d['id'] = i,导致最终所有 id 被反复覆盖为最大值(即 4),且仅首项保留 id 字段。
✅ 正确做法是单层遍历 + 同步计数,无需嵌套。最直观的方式是手动维护计数器:
i = 1
for d in data:
d['id'] = i
i += 1但更 Pythonic、更安全的写法是结合 enumerate() ——它天然提供索引与元素的配对,且默认索引从 0 开始,可通过 start=1 直接生成 1, 2, 3... 序号:
for idx, d in enumerate(data, start=1):
d['id'] = idx完整可运行示例(含文件读写与排序):
import json
# 读取并排序
with open('db.json', 'r') as file:
data = json.load(file)
data.sort(key=lambda x: x['name']) # 按 name 升序排列
# 批量添加 id(推荐方式)
for idx, item in enumerate(data, start=1):
item['id'] = idx
# 验证结果
for item in data:
print(item)
# 输出:
# {'name': 'Joseph', 'id': 1}
# {'name': 'Mary', 'id': 2}
# {'name': 'Peter', 'id': 3}
# {'name': 'Saeed', 'id': 4}⚠️ 注意事项:
- 避免修改原始结构的同时重复遍历:原代码中 for i in range(...): for d in data: 导致每次内层循环都重置 d 引用,break 只中断内层,外层 i 仍递增至 4,最终所有字典被最后一次赋值覆盖。
- enumerate() 比手动计数更健壮,不易出错,且语义清晰。
- 若需生成新列表(不修改原数据),可用列表推导式:[{**d, 'id': idx} for idx, d in enumerate(data, start=1)]。
总结:为字典列表添加自增 ID,核心是“一次遍历、一次赋值”。优先选用 enumerate(data, start=1),简洁、高效、符合 Python 编程习惯。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
Laravel如何生成URL和重定向?(路由助手函数)
JS碰撞运动实现方法详解
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
如何用腾讯建站主机快速创建免费网站?
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
Python图片处理进阶教程_Pillow滤镜与图像增强
,网页ppt怎么弄成自己的ppt?
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
创业网站制作流程,创业网站可靠吗?
java ZXing生成二维码及条码实例分享
Linux系统命令中screen命令详解
网站制作报价单模板图片,小松挖机官方网站报价?
如何在阿里云ECS服务器部署织梦CMS网站?
微信小程序 HTTPS报错整理常见问题及解决方案
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
bing浏览器学术搜索入口_bing学术文献检索地址
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
JS实现鼠标移上去显示图片或微信二维码
免费视频制作网站,更新又快又好的免费电影网站?
三星、SK海力士获美批准:可向中国出口芯片制造设备
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
Laravel如何实现数据库事务?(DB Facade示例)
在线教育网站制作平台,山西立德教育官网?
详解jQuery中的事件
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
如何挑选优质建站一级代理提升网站排名?
javascript中闭包概念与用法深入理解
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
如何在香港服务器上快速搭建免备案网站?
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
详解MySQL数据库的安装与密码配置
Laravel如何优化应用性能?(缓存和优化命令)
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
手机软键盘弹出时影响布局的解决方法
如何快速生成高效建站系统源代码?
高端建站三要素:定制模板、企业官网与响应式设计优化
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
如何快速搭建高效香港服务器网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel如何使用Collections进行数据处理?(实用方法示例)
Laravel Session怎么存储_Laravel Session驱动配置详解
如何在橙子建站中快速调整背景颜色?
下一篇:docker如何打印日志
下一篇:docker如何打印日志

