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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:07:49