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

遍历字典列表生成新键字典列表时仅获最后元素的问题求助

问题解决:遍历字典列表生成新字典列表

问题描述

需要遍历一个字典列表,提取指定键的取值,生成包含新键名的字典列表。

输入数据

data = [
    {'place': 'San Jose', 'seq': 1},
    {'place': 'San Diego', 'seq': 2},
    {'place': 'San Fransisco', 'seq': 3}
]

现有代码

post_obj = []
if len(data) > 0:
    for id in data:
        post_obj = [
            {
                "city": id["place"],
                "display": id["seq"]
            }
        ]
else:
    post_obj["areas"] = []

当前错误输出

仅得到最后一个元素:

[{'cityName': 'Inline', 'displayOrder': 3}]

期望输出

包含所有元素的新字典列表:

[{'cityName': 'San Jose', 'displayOrder': 1}, {'cityName': 'San Diego', 'displayOrder': 2}, {'cityName': 'San Fransisco', 'displayOrder': 3}]

错误原因分析

  • 循环中覆盖列表而非追加:每次循环都直接给post_obj赋值为只包含当前元素的新列表,之前的元素会被覆盖,最终只剩最后一次循环的结果。
  • else分支错误操作:post_obj初始是列表,不能通过post_obj["areas"]的方式给列表添加键,这会触发类型错误。
  • 键名不匹配:现有代码里用的是"city"和"display",但期望输出的键名是"cityName"和"displayOrder",这也是需要修正的点。

修正后的代码

基础循环写法

post_obj = []
if len(data) > 0:
    for item in data:  # 变量名改为item更符合语义,避免和内置id冲突
        post_obj.append({
            "cityName": item["place"],
            "displayOrder": item["seq"]
        })
else:
    # 若需要空列表,直接保持post_obj为[]即可,可按需调整
    post_obj = []

更简洁的列表推导式写法

如果不需要复杂的条件判断,直接用列表推导式更高效:

post_obj = [{"cityName": item["place"], "displayOrder": item["seq"]} for item in data]

验证输出

运行修正后的代码,会得到期望的输出:

[{'cityName': 'San Jose', 'displayOrder': 1}, {'cityName': 'San Diego', 'displayOrder': 2}, {'cityName': 'San Fransisco', 'displayOrder': 3}]

内容的提问来源于stack exchange,提问作者Joe14_1990

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:43:25