如何统计JSON字典中指定列表内provider数量?TypeError报错求助
解决TypeError并统计Provider数量
嘿,我来帮你搞定这个问题!你遇到的TypeError: list indices must be integers not str,本质是把列表和字典的访问方式搞混了——["lookup_results"]["sources"]返回的是一个列表,里面每个元素才是包含provider键的字典,你不能直接用字符串键去索引列表哦。
错误原因复盘
举个反例,如果你之前写了类似这样的代码:
# 错误写法:直接用字符串索引列表 sources = data["lookup_results"]["sources"] provider = sources["provider"] # 这里会触发TypeError
这就错了,因为sources是列表,只能用整数(比如0、1)来访问里面的元素,而不是字符串键。
正确实现方案
1. 先解析JSON(如果原始是字符串格式)
如果你的数据是JSON字符串,先把它转成Python的字典结构:
import json # 你的原始JSON字符串 json_data = '''{ "address": "8.8.8.8", "lookup_results": { "start_time": "2012-03-11T09:30:37.094Z", "detected_by": 1, "sources": [ { "provider": "name_prov_1", "status": 1 }, { "provider": "name_prov_2", "status": 0 }, { "provider": "name_prov_3", "status": 0 } ] } }''' # 解析成Python字典 parsed_data = json.loads(json_data)
2. 统计总Provider数量
因为每个列表元素对应一个provider,所以直接取列表的长度就可以:
# 获取sources列表 sources_list = parsed_data["lookup_results"]["sources"] # 总provider数量就是列表长度 total_provider_count = len(sources_list) print(f"总Provider数量:{total_provider_count}") # 输出:3
3. 进阶:统计特定状态的Provider数量
如果需要统计status为1(或其他值)的provider数量,可以用生成器表达式快速实现:
# 统计status=1的活跃Provider数量 active_provider_count = sum(1 for item in sources_list if item["status"] == 1) print(f"活跃Provider数量:{active_provider_count}") # 输出:1
这样就能完美解决你的问题啦,以后记住:列表用整数索引,字典用字符串键访问哦!
内容的提问来源于stack exchange,提问作者erDi
相关产品推荐
相关产品推荐

