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

如何遍历JSON嵌套字典的Location值并统计特定地点条目数

问题:统计特定地点的职位条目数量时循环异常

问题描述

尝试遍历JSON数据中的职位字典,统计指定地点的条目数量,但循环无法正常工作:要么会统计所有条目(无论地点是否匹配),要么抛出TypeError: list indices must be integers or slices, not str错误。原代码如下:

import requests

def count_jobs_by_location(location):
    api_url = "https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBM-DA0321EN-SkillsNetwork/labs/module%201/Accessing%20Data%20Using%20APIs/jobs.json"
    response = requests.get(api_url)
    if response.ok:
        data = response.json()
        count = 0
        for job in data["jobs"]:
            if job["Location"].lower() == location.lower():
                count += 1
        return count
    else:
        return None

错误原因分析

  1. TypeError报错原因:该API返回的JSON数据直接是职位列表,而非包含jobs键的字典。原代码中尝试用data["jobs"]索引列表,自然会触发类型错误。
  2. 统计所有条目的原因:如果曾错误直接遍历data但未正确判断地点(比如Location字段格式不匹配、条件判断逻辑错误),或者部分条目的Location为空/非字符串类型,调用lower()时抛出异常却未被捕获,可能导致代码逻辑意外执行(比如错误吞掉异常后继续计数)。

修复方案

  1. 直接遍历API返回的列表(无需data["jobs"]);
  2. 增加异常处理,避免因缺少Location键、Location非字符串类型导致的报错;
  3. 改用模糊匹配(in)替代精确匹配,适配Location字段带后缀的情况(比如"New York, NY")。

修复后的代码

import requests

def count_jobs_by_location(location):
    api_url = "https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBM-DA0321EN-SkillsNetwork/labs/module%201/Accessing%20Data%20Using%20APIs/jobs.json"
    response = requests.get(api_url)
    if response.ok:
        data = response.json()
        count = 0
        target_loc = location.lower()
        for job in data:
            # 处理可能的KeyError和非字符串类型的Location
            loc = job.get("Location")
            if isinstance(loc, str) and target_loc in loc.lower():
                count += 1
        return count
    else:
        return None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:27:22