【问题标题】:How to get specific data on a unit of dict in json如何在json中获取dict单元的特定数据
【发布时间】:2020-06-22 05:01:24
【问题描述】:

我有一个json类型的数据:

{
    "data": [
        {
            "id": 1,
            "library_id": 1,
            "caseinfo_id": 80,
            "caseinfo":{
                "id": 840,
                "patient_name": "John"
            }
        },
        {
            "id": 2,
            "library_id": 2,
            "caseinfo_id": 81,
            "caseinfo":{
                "id": 850,
                "patient_name": "Wick"
            }
        }
    ]
}

我想获取特定的信息数据,例如我想获取patient_name = "Wick"的相关信息,所以返回数据将是:

        {
            "id": 2,
            "library_id": 2,
            "caseinfo_id": 81,
            "caseinfo":{
                "id": 850,
                "patient_name": "Wick"
            }
        }

有人可以帮助我吗?非常感谢。

【问题讨论】:

    标签: json python-3.x dictionary


    【解决方案1】:

    您可以使用next() 来获取第一个带有patient_name = "Wick" 的字典。如果未找到匹配项,我们可以提供 defaultNone。如果没有给出默认值,此代码将引发StopIteration 异常。

    d = {
        "data": [
            {
                "id": 1,
                "library_id": 1,
                "caseinfo_id": 80,
                "caseinfo": {"id": 840, "patient_name": "John"},
            },
            {
                "id": 2,
                "library_id": 2,
                "caseinfo_id": 81,
                "caseinfo": {"id": 850, "patient_name": "Wick"},
            },
        ]
    }
    
    print(next((x for x in d["data"] if x["caseinfo"]["patient_name"] == "Wick"), None))
    

    输出:

    {'id': 2, 'library_id': 2, 'caseinfo_id': 81, 'caseinfo': {'id': 850, 'patient_name': 'Wick'}}
    

    【讨论】:

      【解决方案2】:

      您要查找的值在嵌套字典中:

      dd = {
          "data": [
              {
                  "id": 1,
                  "library_id": 1,
                  "caseinfo_id": 80,
                  "caseinfo":{
                      "id": 840,
                      "patient_name": "John"
                  }
              },
              {
                  "id": 2,
                  "library_id": 2,
                  "caseinfo_id": 81,
                  "caseinfo":{
                      "id": 850,
                      "patient_name": "Wick"
                  }
              }
          ]
      }
      
      for key, value in dd.items():
          for elem in value:
              for k,v in elem.items():
                  if isinstance(v,dict):
                      if 'Wick' in v.values():
                          print(elem)
      

      输出:

      {'caseinfo_id': 81, 'library_id': 2, 'id': 2, 'caseinfo': {'id': 850, 'patient_name': 'Wick'}} 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多