代码之家  ›  专栏  ›  技术社区  ›  Stephan Kristyn

python在json结构中成为兄弟

  •  1
  • Stephan Kristyn  · 技术社区  · 6 年前

    假设我被给予 目标 并且想要 目标 . 您将如何迭代这个过程,并在一行程序中获得所需的目标值(如A1)。我通过使用 json.load(json_data)

    JSON

    {
      "conservative": {
        "goal": "A1",
        "target" : 60000,
        "oneoff": 6000,
        "regular": 600
      },
      "moderate": {
        "goal": "A2",
        "target": 70000,
        "oneoff": 7000,
        "regular": 710
      },
      "optimistic": {
        "goal": "A3",
        "target": 80000,
        "oneoff": 8000,
        "regular": 800
      }
    }
    
    3 回复  |  直到 6 年前
        1
  •  3
  •   niraj    6 年前

    可能您可以尝试使用以下方法获取与输入值匹配的目标列表( 如果期望单个值,您可以简单地 [0] 从列表中获取单个项目 )例如 goal_val = 'A1' :

    target = [val['target'] for _, val in my_data.items() if val['goal'] == goal_val]
    
        2
  •  2
  •   Nikolas Stevenson-Molnar    6 年前

    下面是一个简单的单行解决方案:

    d = {
      "conservative": {
        "goal": "A1",
        "target" : 60000,
        "oneoff": 6000,
        "regular": 600
      },
      "moderate": {
        "goal": "A2",
        "target": 70000,
        "oneoff": 7000,
        "regular": 710
      },
      "optimistic": {
        "goal": "A3",
        "target": 80000,
        "oneoff": 8000,
        "regular": 800
      }
    }
    
    goal = "A1" # <-- Your goal here
    
    target = next(v['target'] for _, v in d.items() if v['goal'] == goal)
    # target == 60000
    

    这将使用生成器表达式来避免执行超出需要的任何迭代。 next() 将确保只返回一个值。

    这可以很容易地修改以返回完整的匹配字典:

    match = next(v for k, v in d.items() if v['goal'] == goal)
    # match == {"goal": "A1", target: 60000, ...}
    
        3
  •  1
  •   Joe Tilsed    6 年前

    以下代码是我的朋友:

    data = {
      "conservative": {
        "goal": "A1",
        "target" : 60000,
        "oneoff": 6000,
        "regular": 600
      },
      "moderate": {
        "goal": "A2",
        "target": 70000,
        "oneoff": 7000,
        "regular": 710
      },
      "optimistic": {
        "goal": "A3",
        "target": 80000,
        "oneoff": 8000,
        "regular": 800
      }
    }
    
    goal_required = 'A1'
    
    for obj in data:
        if data[obj]['goal'] == goal_required:
            target = data[obj]['target']
            print("Object {} with the goal {} needs a target of {}".format(obj, goal_required, target))
    

    其输出:

    Object conservative with the goal A1 needs a target of 60000