如何在 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 编程习惯。


# python  # js  # json  # 排列 


相关栏目: 【 网站优化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驱动配置详解  如何在橙子建站中快速调整背景颜色?