Python中从复杂JSON提取指定数据的最优策略(按order取nethash)
从海量键的JSON中提取指定order对应nethash的最优实现
我懂你碰到的麻烦——data下面一堆随机命名的键(比如aby、adz、agn),逐个指定肯定不现实。要快速定位order为160的条目对应的nethash,最优思路就是直接遍历所有条目,完全不用管键名是什么。
先理清楚你的JSON结构:每个键对应的对象里,order是直接属性,nethash藏在info子对象里。我们只需要遍历data的所有值,检查每个值的order是否等于目标值,找到后提取对应的nethash就行。
基础实现(单匹配场景)
如果确定只有一个条目符合order=160,用这个方法最高效,找到目标就立刻停止遍历:
import json # 假设你已经把JSON数据加载成了Python字典 # 实际场景中可以从文件读取: # with open('your_data.json', 'r') as f: # json_data = json.load(f) json_data = { "data": { "aby": {"info": {"nethash": 66289.728291}, "order": 109}, "adz": {"info": {"nethash": 612234.455356}, "order": 160}, "agn": {"info": {"nethash": 86.217988}, "order": 61} # 其他大量键... }, "message": "", "status": "ok", "timestamp": "Thu, 10 May 2018 08:51:07 GMT" } target_order = 160 found_nethash = None # 遍历data下的所有条目,无需关心键名 for coin_entry in json_data["data"].values(): if coin_entry["order"] == target_order: found_nethash = coin_entry["info"]["nethash"] break # 找到目标后立刻停止,节省时间 if found_nethash is not None: print(f"Order为{target_order}的nethash值是:{found_nethash}") else: print(f"没有找到Order为{target_order}的条目")
进阶实现(多匹配场景)
如果可能存在多个条目对应同一个order值,用列表推导式可以一次性收集所有匹配结果:
target_order = 160 matching_nethashes = [ entry["info"]["nethash"] for entry in json_data["data"].values() if entry["order"] == target_order ] if matching_nethashes: print(f"找到{len(matching_nethashes)}个匹配结果:") for nh in matching_nethashes: print(nh) else: print(f"未找到Order为{target_order}的条目")
为什么这是最优策略?
- 时间复杂度最优:不管
data下有多少键,最多遍历一次所有条目(O(n)复杂度),这是理论上的最优解——你不可能在不检查条目的情况下找到目标。 - 灵活性拉满:完全不需要关心键名,哪怕键名随机变化也不影响代码运行。
- 代码简洁易维护:逻辑清晰,后续要修改目标值或者提取其他字段,只需要改几行代码就行。
内容的提问来源于stack exchange,提问作者Linus TechTips
相关产品推荐
相关产品推荐

