首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中过滤和打印特定的json词典

如何在python中过滤和打印特定的json词典
EN

Stack Overflow用户
提问于 2022-11-15 11:01:16
回答 5查看 67关注 0票数 2

我正在学习蟒蛇。我和json遇到了一个我无法克服的问题。

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

代码语言:javascript
复制
{
    "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"
    }
}

我想对这些字典进行过滤,以便只打印“检测到”的键和值: true

例如,我只想打印

代码语言:javascript
复制
{
    "Sophos": {
        "detected": true,
        "result": "phishing site"
    },
    "Fortinet": {
        "detected": true,
        "result": "phishing site"
    }
}

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

代码语言:javascript
复制
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中打印结果。我搜索并阅读了各种解决方案(使用lambda的列表理解或筛选()),但它对我没有帮助。

我还在学习,谢谢你的理解,如果这是一个简单的案例。

提前感谢您的帮助和回答。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2022-11-15 11:11:02

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

代码语言:javascript
复制
filtered = {k: v for k, v in orignal_dict.items() if v.get("detected") == true}

以你为例-

代码语言:javascript
复制
true = True
false = False

data = {
    "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 data.items() if v.get("detected") == true}
print(json.dumps(filtered, indent=4))

输出:

代码语言:javascript
复制
{
    "Sophos": {
        "detected": true,
        "result": "phishing site"
    },
    "Fortinet": {
        "detected": true,
        "result": "phishing site"
    },
    "alphaMountain.ai": {
        "detected": true,
        "result": "phishing site"
    }
}
票数 3
EN

Stack Overflow用户

发布于 2022-11-15 11:12:24

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

代码语言:javascript
复制
for key, value in example.items():
    if value["detected"] == True:
        print(key, value)

或者,您可以使用filter()函数来实现它。

代码语言:javascript
复制
list(filter(lambda x: x["detected"] == True, example.values()))

输出:

代码语言:javascript
复制
[{'detected': True, 'result': 'phishing site'}, {'detected': True, 'result': 'phishing site'}, {'detected': True, 'result': 'phishing site'}]
票数 2
EN

Stack Overflow用户

发布于 2022-11-15 11:15:11

一种办法可以是:

代码语言:javascript
复制
for i in jsondump:
    if jsondump[i]['detected'] == True:
        print(jsondump[i])

就像我们在Jsondump中为每个用户使用循环一样,它会给出所有保存数据的对象名称,例如

代码语言:javascript
复制
for i in jsondump:
     print(i)

上述守则将导致:

代码语言:javascript
复制
Sophos  
Phishtank  
CyberCrime  
..  
..  
Fortinet  
alphaMountain.ai
Lionic  
Cyble  

现在,如果我们有密钥,我们可以循环使用jsondumpi,并将值存储在“检测”中,因此我们将传入jsondumpi,以检查它是否为真。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74444498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档