从多嵌套字典中捕获python值

时间:2018-07-17 20:30:44

标签: python sdk ebay

从多嵌套词典获取变量时遇到一些问题。

我正在尝试使用以下代码段获取CategoryParentID:

print dicstr['CategoryParentID']

而我的字典看起来像这样:

{
    "CategoryCount": "12842",
    "UpdateTime": "2018-04-10T02:31:49.000Z",
    "Version": "1057",
    "Ack": "Success",
    "Timestamp": "2018-07-17T18:33:40.893Z",
    "CategoryArray": {
        "Category": [
            {
                "CategoryName": "Antiques",
                "CategoryLevel": "1",
                "AutoPayEnabled": "true",
                "BestOfferEnabled": "true",
                "CategoryParentID": "20081",
                "CategoryID": "20081"
            },
.
.
.
}

但是,我遇到此错误:

Traceback (most recent call last):
  File "get_categories.py", line 25, in <module>
    getUser()
  File "get_categories.py", line 18, in getUser
    print dictstr['CategoryParentID']
KeyError: 'CategoryParentID'

3 个答案:

答案 0 :(得分:2)

您需要先遍历字典。 CategoryParentID在列表中(因此为[0]),列表为Category的值,CategoryArray的值为dicstr = {'CategoryCount': '12842', 'UpdateTime': '2018-04-10T02:31:49.000Z', 'Version': '1057', 'Ack': 'Success', 'Timestamp': '2018-07-17T18:33:40.893Z', 'CategoryArray': {'Category': [{'CategoryName': 'Antiques', 'CategoryLevel': '1', 'AutoPayEnabled': 'true', 'BestOfferEnabled': 'true', 'CategoryParentID': '20081', 'CategoryID': '20081'}] } } dicstr['CategoryArray']['Category'][0]['CategoryParentID'] '20081'

void f() {
  {
    int x = 1
    // do something with x
  }

  // x not visible here anymore
}

答案 1 :(得分:1)

您必须像这样获得它-

x['CategoryArray']['Category'][0]['CategoryParentID']

如果我们简化您发布的字典,我们会得到-

d = {'CategoryArray': {'Category': [{'CategoryParentID': '20081'}]}}
# "CategoryArray" 
# "Category" child of CategoryArray 
#  Key "Category" contains a list [{'CategoryName': 'Antiques', 'CategoryParentID': '20081'...}]
#  Get 0th element of key "Category" and get value of key ["CategoryParentID"]

我希望这是有道理的

答案 2 :(得分:1)

当您要求Python给您dicstr['CategoryParentID']时,您要它做的就是为您提供与'CategoryParentID'中的键dicstr关联的值。

看看定义字典的方式。 dictstr的键将是dictstr下正好一层的所有键。这些是当您指定CategoryParentID时Python试图寻找dictstr['CategoryParentID']的关键。这些键是:

"CategoryCount"

"UpdateTime"

"Version"

"Ack"

"Timestamp"

"CategoryArray"

请注意,您要查找的密钥不存在。这是因为它在dictstr中嵌套了多个级别。您需要保持“跳来跳去”这些键,直到获得CategoryParentID键为止。试试:

dictstr['CategoryArray']['Category'][0]['CategoryParentID']

请注意其中的[0]。与'Category'键相关联的值是一个列表。该列表包含一个元素,即一本字典。为了找到拥有您实际想要的键的字典,您必须在包含字典的索引处索引到列表。由于只有一个元素,因此可以使用[0]直接对其进行索引以获取字典,然后继续“跳动”键。