[英]Safely get nested list index from json?
我知道如何使用.get()
從 json 安全地獲取密鑰
data = {"person": {"name": "chris", "age": 11, "interests": []}}
data.get("person", {}).get("height")
只會返回None
但是如果我想對列表做同樣的事情呢?
data.get("person", {}).get("interests", []).get([3], {}).get("someotherdata")
我如何假設列表索引存在並在不存在時安全地繼續?
顯然我可以嘗試獲取列表並在嘗試獲取索引之前檢查其長度,但是沒有更簡潔的方法嗎?
克里斯
您可以使用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"
和"interests"
的嵌套字典,然后如果"interests"
鍵具有索引為 3 的相應列表,則提供匹配。
在上面的示例中,不會打印任何內容,因為"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
Output:
4
編輯:純內聯解決方案:
r = v[3] if len(v:=data.get('person', {}).get('interests', [])) > 3 else {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.