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

Python遍历字典列表提取值子集出错,求正确循环实现方法

问题:提取字典列表中指定键生成新字典列表

原数据

"values": [
    {
        "a": 1,
        "b": 2,
        "center code here": 3,
        "d": 4,
    },
    {
        "a": 1,
        "b": 2,
        "c": 3,
        "d": 4,
    },
    {
        "a": 1,
        "b": 2,
        "c": 3,
        "d": 4,
    },
    {
        "a": 1,
        "b": 2,
        "c": 3,
        "d": 4
    }
]

注:实际代码中data_list对应上述"values"的列表部分

错误代码

listx = [a,b]
dict2 = {}
 
for d in data_list:
    for v,x in d.items():
         if v in listx:
             dict2[v] = (x)
 
print(len(dict2))

预期结果

"values": [
    {
        "a": 1,
        "b": 2
    },
    {
        "a": 1,
        "b": 2
    },
    {
        "a": 1,
        "b": 2
    },
    {
        "a": 1,
        "b": 2
    }
]

错误原因

  • listx = [a,b]中的a、b未加引号,会被当作未定义变量,正确写法应为listx = ['a','b']
  • 仅使用单个字典dict2存储结果,每次循环都会覆盖该字典的键值,最终只会保留最后一个元素的指定键值,无法生成包含多个字典的列表
  • 没有创建列表来收集每个处理后的字典

正确实现方法

方法1:基础循环写法

listx = ['a', 'b']
result = []  # 用列表存储每个处理后的字典

for d in data_list:
    new_dict = {}
    for key in listx:
        # 仅当原字典存在该键时添加,避免KeyError
        if key in d:
            new_dict[key] = d[key]
    result.append(new_dict)

# 输出结果
print(result)

方法2:列表推导式(简洁写法)

如果确定所有字典都包含listx中的键,可以用更简洁的列表推导式:

listx = ['a', 'b']
result = [{key: d[key] for key in listx} for d in data_list]

print(result)

方法3:处理键不存在的情况(更健壮)

如果部分字典可能缺少listx中的键,用dict.get()避免报错,不存在的键会返回None或指定默认值:

listx = ['a', 'b']
result = [{key: d.get(key) for key in listx} for d in data_list]

# 或者指定默认值,比如空字符串
# result = [{key: d.get(key, '') for key in listx} for d in data_list]

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:55:29