我正在學習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"
}
}
我想以僅列印其中"detected": true的那些鍵和值的方式過濾這些字典。
例如我只想列印
{
"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),但它對我沒有幫助。
我還在學習,如果這是一個簡單的案例,請提前感謝您的理解。
預先感謝您的幫助和回答。
uj5u.com熱心網友回復:
您可以使用字典理解來過濾回應字典。請注意,在您提供的示例中,我認為您有 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"
}
}
uj5u.com熱心網友回復:
您可以運行一個回圈,然后進行檢查
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'}]
uj5u.com熱心網友回復:
一種方法可以是:
for i in jsondump:
if jsondump[i]['detected'] == True:
print(jsondump[i])
就好像我們在 Jsondump 中回圈使用 for each 一樣,它會導致給出所有保存資料的物件名稱,即
for i in jsondump:
print(i)
上面的代碼將導致:
Sophos
Phishtank
CyberCrime
..
..
Fortinet
alphaMountain.ai
Lionic
Cyble
現在,如果我們有密鑰,我們可以使用 jsondump[i] 回圈并將值存盤在 'detected' 中,因此我們將傳入 jsondump[i]['detected'] 以檢查它是否為真。
uj5u.com熱心網友回復:
在這里我們可以使用字典理解
new_dict = { key:val for (key,val) in example.items() if(value["detected"] == True)}
將根據您想要的條件創建一個新串列,檢測到的條件應該為真
在這里,我們遍歷整個字典,然后對于也是字典的每個元素(在本例中為 val),我們檢查檢測到的值是否為 True 然后我們只將整個字典添加到 new_dict
uj5u.com熱心網友回復:
您可以使用帶有 lambda 的通用函式按值過濾 Python 字典,檢查以下示例:
dataset = {
"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"
}
}
def filter_dict(d, f):
''' Filters dictionary d by function f. '''
newDict = dict()
# Iterate over all (k,v) pairs in dict
for key, value in d.items():
# Is condition satisfied?
if f(key, value):
newDict[key] = value
return newDict
print(filter_dict(dataset, lambda k, v: v['detected'] == True))
輸出:
{'Sophos': {'detected': True, 'result': 'phishing site'}, 'Fortinet': {'detected': True, 'result': 'phishing site'}, 'alphaMountain.ai': {'detected': True, 'result': 'phishing site'}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534457.html
上一篇:在Jmeter中輪詢
