【问题标题】:How to filter and print particular json dictionaries in python如何在 python 中过滤和打印特定的 json 字典
【发布时间】:2022-11-15 19:24:33
【问题描述】:

我正在学习python。我遇到了无法克服的 json 问题。

我在 python 中有来自 json 的这个数据集:

{
    "Sophos": {
        "detected": true,
        "result": "phishing site"
    },
    "Phishtank": {
        "detected": false,
        "result": "clean site"
    },
    "CyberCrime": {
        "detected": false,
        "result": "clean site"
    },
    "Spam404": {
        "detected": false,
        "result": "clean site"
    },
    "SecureBrain": {
        "detected": false,
        "result": "clean site"
    },
    "Hoplite Industries": {
        "detected": false,
        "result": "clean site"
    },
    "CRDF": {
        "detected": false,
        "result": "clean site"
    },
    "Rising": {
        "detected": false,
        "result": "clean site"
    },
    "Fortinet": {
        "detected": true,
        "result": "phishing site"
    },
    "alphaMountain.ai": {
        "detected": true,
        "result": "phishing site"
    },
    "Lionic": {
        "detected": false,
        "result": "clean site"
    },
    "Cyble": {
        "detected": false,
        "result": "clean site"
    }
}

我想以只打印那些键和值的方式过滤这些字典“检测到”:真.

例如我只想打印

{
    "Sophos": {
        "detected": true,
        "result": "phishing site"
    },
    "Fortinet": {
        "detected": true,
        "result": "phishing site"
    }
}

我使用 VirusTotal apikey v2 https://developers.virustotal.com/v2.0/reference/domain-report 我在 python 中的代码:

parameters = {'apikey': api_key, 'resource': domain}

response = requests.get(url, params=parameters)
    
python_response = json.loads(response.text)

scans = python_response["scans"]

example = json.dumps(python_response["scans"], indent=4)

print(example)

我正在寻找一种简单易读的方法来做到这一点,以便我尽可能地理解它。我想用 Python 打印结果。我为此搜索并阅读了各种解决方案(列表理解或 filter() with lambda),但它对我没有帮助。

我还在学习,如果这是一个简单的案例,请提前感谢您的理解。

预先感谢您的帮助和回答。

【问题讨论】:

    标签: python json api dictionary object


    【解决方案1】:

    您可以使用dict comprehension 来过滤响应字典。 请注意,在您提供的示例中,我认为您有 json 数据而不是 python 对象。 true 不是 python 中的有效布尔关键字,它应该是 True 而不是。

    filtered = {k: v for k, v in example.items() if v.get("detected") == true}
    

    对于你的例子 -

    true = True
    false = False
    
    example = {
        "Sophos": {
            "detected": true,
            "result": "phishing site"
        },
        "Phishtank": {
            "detected": false,
            "result": "clean site"
        },
        "CyberCrime": {
            "detected": false,
            "result": "clean site"
        },
        "Spam404": {
            "detected": false,
            "result": "clean site"
        },
        "SecureBrain": {
            "detected": false,
            "result": "clean site"
        },
        "Hoplite Industries": {
            "detected": false,
            "result": "clean site"
        },
        "CRDF": {
            "detected": false,
            "result": "clean site"
        },
        "Rising": {
            "detected": false,
            "result": "clean site"
        },
        "Fortinet": {
            "detected": true,
            "result": "phishing site"
        },
        "alphaMountain.ai": {
            "detected": true,
            "result": "phishing site"
        },
        "Lionic": {
            "detected": false,
            "result": "clean site"
        },
        "Cyble": {
            "detected": false,
            "result": "clean site"
        }
    }
    
    
    filtered = {k: v for k, v in example.items() if v.get("detected") == true}
    print(filtered)
    

    输出:

    {'Sophos': {'detected': True, 'result': 'phishing site'}, 'Fortinet': {'detected': True, 'result': 'phishing site'}, 'alphaMountain.ai': {'detected': True, 'result': 'phishing site'}}
    

    【讨论】:

      【解决方案2】:

      您可以运行一个循环,然后进行检查

      for key, value in example.items():
          if value["detected"] == True:
              print(key, value)
      

      【讨论】:

        猜你喜欢
        • 2022-11-12
        • 2012-02-24
        • 2019-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-25
        • 1970-01-01
        相关资源
        最近更新 更多