我正在学习蟒蛇。我和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"
}
}我想对这些字典进行过滤,以便只打印“检测到”的键和值: true。
例如,我只想打印
{
"Sophos": {
"detected": true,
"result": "phishing site"
},
"Fortinet": {
"detected": true,
"result": "phishing site"
}
}我在python中使用VirusTotal每个键v2 https://developers.virustotal.com/v2.0/reference/domain-report我的代码:
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的列表理解或筛选()),但它对我没有帮助。
我还在学习,谢谢你的理解,如果这是一个简单的案例。
提前感谢您的帮助和回答。
发布于 2022-11-15 11:11:02
您可以使用dict理解过滤响应字典。注意,在您提供的示例中,我认为您有json数据,而不是python对象。true在python中不是一个有效的布尔关键字,它应该是True。
filtered = {k: v for k, v in orignal_dict.items() if v.get("detected") == true}以你为例-
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))输出:
{
"Sophos": {
"detected": true,
"result": "phishing site"
},
"Fortinet": {
"detected": true,
"result": "phishing site"
},
"alphaMountain.ai": {
"detected": true,
"result": "phishing site"
}
}发布于 2022-11-15 11:12:24
您可以运行一个循环,然后进行检查。
for key, value in example.items():
if value["detected"] == True:
print(key, value)或者,您可以使用filter()函数来实现它。
list(filter(lambda x: x["detected"] == True, example.values()))输出:
[{'detected': True, 'result': 'phishing site'}, {'detected': True, 'result': 'phishing site'}, {'detected': True, 'result': 'phishing site'}]发布于 2022-11-15 11:15:11
一种办法可以是:
for i in jsondump:
if jsondump[i]['detected'] == True:
print(jsondump[i])就像我们在Jsondump中为每个用户使用循环一样,它会给出所有保存数据的对象名称,例如
for i in jsondump:
print(i)上述守则将导致:
Sophos
Phishtank
CyberCrime
..
..
Fortinet
alphaMountain.ai
Lionic
Cyble 现在,如果我们有密钥,我们可以循环使用jsondumpi,并将值存储在“检测”中,因此我们将传入jsondumpi,以检查它是否为真。
https://stackoverflow.com/questions/74444498
复制相似问题