我知道如何使用 json 安全地獲取密鑰.get()
data = {"person": {"name": "chris", "age": 11, "interests": []}}
data.get("person", {}).get("height")只會回來None
但是如果我想對串列做同樣的事情呢?
data.get("person", {}).get("interests", []).get([3], {}).get("someotherdata")
如果不存在,我如何假設串列索引存在并安全地進行?
顯然我可以在嘗試獲取索引之前嘗試獲取串列并檢查其長度,但是沒有更清潔的方法嗎?
克里斯
uj5u.com熱心網友回復:
您可以使用match-case:
data = {"person": {"name": "chris", "age": 11, "interests": []}}
match data:
case {"person": {"interests": [_, _, _, val, *_]}}:
print(val)
case _: #default case, only executes no match is made
pass
在這里,該case塊嘗試匹配包含鍵"person"和的嵌套字典,然后如果該鍵具有索引為 3 的對應串列,"interests"則提供匹配。"interests"
在上面的示例中,不會列印任何內容,因為串列值為"interests"空。但是,如果"interests"索引為3,4將被列印:
data = {"person": {"name": "chris", "age": 11, "interests": [1, 2, 3, 4]}}
match data:
case {"person": {"interests": [_, _, _, val, *_]}}:
print(val)
case _:
pass
輸出:
4
編輯:純行內解決方案:
r = v[3] if len(v:=data.get('person', {}).get('interests', [])) > 3 else {}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/439301.html
上一篇:如何正確撰寫此Json
下一篇:錯誤:沒有找到類org.json.JSONObject的序列化程式,也沒有找到創建BeanSerializer的屬性
