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

如何根据用户输入的序号删除JSON文件中的指定字典元素

完整实现代码

def aktiv_remove_mat():
    import json
    file_path = "/Users/maltheschroderjakobsen/Downloads/projekt/mat.json"
    # 读取JSON文件内容
    with open(file_path, 'r', encoding='utf-8') as f:
        mat_list = json.load(f)
    
    # 生成可选资产列表并打印
    mat_aktiver = []
    for dct in mat_list:
        if "navn" in dct:
            mat_aktiver.append(dct["navn"])
    
    print("Vælg det anlægsaktiv der skal fjernes")
    for index, item in enumerate(mat_aktiver, start=1):
        print(index, item)
    
    # 输入合法性校验
    while True:
        try:
            input_index = int(input(f'Skriv tallet på ønsket anlægsaktiv (1-{len(mat_aktiver)}): '))
            if 1 <= input_index <= len(mat_aktiver):
                break
            print(f"输入无效,请输入1到{len(mat_aktiver)}之间的数字")
        except ValueError:
            print("输入无效,请输入合法数字")
    
    # 转换序号为列表索引并删除对应元素
    del mat_list[input_index - 1]
    
    # 回写修改后的内容到原文件
    with open(file_path, 'w', encoding='utf-8') as f:
        json.dump(mat_list, f, indent=2, ensure_ascii=False)
    print(f"已成功删除序号为{input_index}的资产")

核心逻辑说明

  • 索引转换:你打印的选项是从1开始编号的,而Python列表默认是0起始下标,因此删除元素时需要把用户输入的序号减1,才能定位到正确的目标元素。
  • 输入校验:增加了循环校验逻辑,避免用户输入非数字、超出可选范围的数值时程序直接崩溃。
  • 格式化回写:使用json.dump()写入修改后的列表时,加indent=2参数可以保持JSON文件的缩进格式,和你原有的文件结构一致,ensure_ascii=False可以避免写入非ASCII字符时出现乱码。
  • 资源安全:用with语句管理文件操作,执行完会自动关闭文件句柄,避免资源泄漏。

内容的提问来源于stack exchange,提问作者Malthe Schrøder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:27:01