【问题标题】:Python Dict Key Error. How do I loop through nested dict and check for a keyPython 字典键错误。如何循环嵌套字典并检查键
【发布时间】:2020-05-14 08:04:26
【问题描述】:

我有以下嵌套的字典,我试图在下面循环。好吧,不一定要循环,但我只想检查标签是否有值“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) 

【问题讨论】:

  • 请提供完整的错误回溯
  • 另外,请不要在代码中间为 cmets 使用三引号。它们适用于文档字符串,但除此之外使用 cmets。

标签: python arrays dictionary nested


【解决方案1】:

假设结构保持不变,你想要的是:

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 的最终代码

【讨论】:

  • 我在发帖时连接速度很慢,所以不知何故它被三重粘贴了。我会试试你的建议。非常感谢。
  • 感谢您的帮助,我已经解决了,但我确实需要对您的代码进行一些更改。此行返回一个类型错误,因为 list_data 是一个列表而不是一个 dict,所以我运行了一个 for 循环并对从中获得的 dict 进行了 GET,它起作用了。 dictionary_data = list_data.get("_vnd").get("v1")
  • 最终代码如下: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)
【解决方案2】:

感谢大家,尤其是@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)```

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2014-03-30
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2019-04-19
    相关资源
    最近更新 更多