簡體   English   中英

從 json 安全獲取嵌套列表索引?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM