Python如何从已解析的单键字典构成的JSON列表中提取键与值
遍历提取列表嵌套单键字典的键值实现方案
问题根因
你之前的写法拿不到结果,核心是对Python原生字典的访问方式理解有偏差:
- 你拿到的解析后JSON结构,本质是列表嵌套独立字典,每个列表元素都是普通的Python字典,根本没有
.key、.value这类内置属性 - 写
data.key时,Python会把它解析为“查询data字典中键为key的对应值”,完全不是你预期的“拿到字典本身的键”,自然会触发AttributeError、或者返回None的异常结果。
可直接跑通的实现方法
首先提醒一个编码习惯问题:不要把你的列表变量直接命名为json,这个名称是Python官方JSON解析库的模块名,同名会覆盖模块引用,导致后续JSON相关功能失效,建议改成比如parsed_data这类语义化的变量名。
方法1:通用遍历写法(适配任意键值对数量的字典)
不管每个字典里存几个键值对,这种写法都能正常遍历:
parsed_data = [ {'minecraft.net': 'green'}, {'session.minecraft.net': 'green'}, {'account.mojang.com': 'green'}, {'authserver.mojang.com': 'green'}, {'sessionserver.mojang.com': 'red'}, {'api.mojang.com': 'green'}, {'textures.minecraft.net': 'green'}, {'mojang.com': 'green'} ] for item in parsed_data: # 遍历当前字典的所有键值对 for domain, status in item.items(): print(domain) # 输出字典的键,比如 minecraft.net print(status) # 输出对应的值,比如 green
方法2:针对单键字典的简化写法
因为你的结构里每个字典都只存1个键值对,不需要嵌套循环的话可以直接提取:
for item in parsed_data: domain = list(item.keys())[0] status = list(item.values())[0] print(f"{domain}: {status}")
运行效果参考
用上面的代码跑你给出的Mojang服务状态数据,输出结果为:
minecraft.net: green session.minecraft.net: green account.mojang.com: green authserver.mojang.com: green sessionserver.mojang.com: red api.mojang.com: green textures.minecraft.net: green mojang.com: green
内容的提问来源于stack exchange,提问作者Pixeluted
相关产品推荐
相关产品推荐

