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

请求排查从字典列表中匹配键值筛选目标字典的代码问题

问题排查与解决方案

看起来你现在需要从字典列表里筛选出sqlOperations中type为CreateTable的子字典,但现有代码没达到预期,我来帮你捋捋问题出在哪,以及怎么修正。

现有代码的核心问题

先看你写的代码片段:

for i in json_data:
    logger.debug("I is :: {} ".format(type(i)))
    sql_operations = i['sqlOperations']
    for j in sql_operations:
        logger.debug("J is :: {} ".format(type(j)))
        for k,v in j.items():
            if k == 'operationType' and v == 'REPLACE View':
                logger.debug("Key is {} and Item is {}".format(k,v))

这里有几个明显的问题:

  • 键名不匹配:你要筛选的是type键,但代码里判断的是operationType,和输入数据里的键完全对不上。
  • 目标值错误:你需要的是CreateTable类型,但代码里判断的是'REPLACE View',和预期筛选的内容不符。
  • 没有收集结果:代码只是打印了日志,但没有把符合条件的字典收集起来,自然输出不了预期的结果数组。

修正后的代码

针对你的需求,我们可以调整代码逻辑,直接筛选并收集符合条件的项:

# 假设json_data是你的输入列表
result = []
for item in json_data:
    # 遍历每个字典里的sqlOperations数组
    for operation in item['sqlOperations']:
        # 判断type是否为CreateTable
        if operation.get('type') == 'CreateTable':
            result.append(operation)

# 打印或返回结果
print(result)

如果想用更简洁的列表推导式,也可以写成:

result = [op for item in json_data for op in item['sqlOperations'] if op.get('type') == 'CreateTable']

代码解释

  • 我们先初始化一个空列表result用来存放符合条件的字典。
  • 外层循环遍历输入列表里的每个主字典,取出其中的sqlOperations数组。
  • 内层循环遍历sqlOperations里的每个子字典,判断type键的值是否为CreateTable,如果是就添加到result里。
  • 使用operation.get('type')而不是直接operation['type']是为了避免如果某个子字典没有type键时抛出KeyError,让代码更健壮。

这样运行后,就能得到你想要的预期输出啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:56:34