簡體   English   中英

Python 字典鍵錯誤。 如何遍歷嵌套字典並檢查鍵

[英]Python Dict Key Error. How do I loop through nested dict and check for a key

我有以下嵌套的字典,我正在嘗試循環遍歷它。 好吧,不一定循環,但我只想檢查標簽是否具有值“EDD”。 如果是,那么我想觸發一些其他動作。

我的問題是我不斷收到標簽鍵錯誤的錯誤。

請問我該怎么做。

message.data = {
          "messages": [{
            "to": "wa-id",
            "from": "another-wa-id",
            "type": "text",
            "_vnd": {
              "v1": {
                "direction": "outbound",
                "in_reply_to": "an-earlier-inbound-external-id",
                "author": {
                  "name": "the name of the author",
                  "type": "SYSTEM | OPERATOR",
                },
                "labels": [{
                  "uuid": "the-uuid",
                  "value": "EDD"
                }]
              }
            }
          }, ]
        }

我的代碼看起來像這樣:

 whatsapp_contact_id = message.data
    print(whatsapp_contact_id.keys())
    list_data = whatsapp_contact_id["messages"]
    print(list_data)
    for dictionary_data in list_data:
        print(dictionary_data)
    dictionary_keys = dictionary_data.items()
    print(dictionary_keys)
    """
    EDD_label = dictionary_data["labels"]
    """
    EDD_label = dictionary_data.get('labels', 'could not find')
    print("The label is below")
    print(EDD_label) 

假設結構保持不變,你想要的是:

whatsapp_contact_id = message.data
list_data = whatsapp_contact_id.get("messages")
for dictionary_data in list_data:
    dictionary_data_2 = dictionary_data.get("_vnd").get("v1")
    labels_data = dictionary_data_2.get("labels")
    print(labels_data)
    for EDD in labels_data:
        EDD_string = EDD.get("value", "EDD label not present")
        print(EDD_string)

此外,您似乎對代碼進行了三次粘貼。

編輯以包含來自 OP 的最終代碼

謝謝大家,尤其是@tennoshi。

這有效:

whatsapp_contact_id = message.data
    list_data = whatsapp_contact_id.get("messages")
    for dictionary_data in list_data:
        dictionary_data_2 = dictionary_data.get("_vnd").get("v1")
        labels_data = dictionary_data_2.get("labels")
        print(labels_data)
        for EDD in labels_data:
            EDD_string = EDD.get("value", "EDD label not present")
            print(EDD_string)```

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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