访问嵌套字典python中的键

时间:2017-08-31 06:47:20

标签: python json

我有一个如下所示的JSON对象。实际上是巨大的JSON文件,简化为提出这个问题。

"header": {
        "headerAttributes": {
            "pageCount": 5,
            "totalCount": 5
        }
    },
"payload": [
    {
        "firstKey": [
                {
                    "nestedKey_1": "1",
                    "nestedKey_2": "2"
                },
                {
                    "nestedKey_3": "3",
                    "nestedKey_4": "4"
                }
            ]
    }
]

现在我写了下面的python代码来访问[]里面的值。

Total_Orders_Count = json_response ['header']['headerAttributes']['totalCount']
for i in range(0,Total_Orders_Count): 
            dict = json_response ['payload'][i]
            inner_dict = dict ['firstKey'] [0]
            print inner_dict ['nestedKey_1'] + '(' + inner_dict['nestedKey_2'] + ')'

上面的代码工作正常。但是,dict [' firstKey'] [0]的使用对于超过1的值不起作用。

两个问题。 1.是否有更好的方法来访问[]内的键值。 2.我们可以在[]中找到值的长度。对于此列表," firstKey"下的值的长度。是2。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

直接遍历列表 。没有必要事先了解一个长度:

for d in json_response ['payload']:
    for inner_dict in d['firstKey']:
        print '{0[nestedKey_1]}({0]nestedKey_2})'.format(inner_dict)

for <name> in <listobject>循环是for each construct;没有生成索引。相反,循环将列表中的每个元素分配给目标名称。

我将名称dict更改为d以避免屏蔽内置类型。我还使用string formatting将内部字典中的值放入字符串中。

请注意,我完全使用totalCount键删除了。这里没有必要查看这个值。

至于查找列表的长度,只需使用len() function即可。同样,没有必要使用该函数 here ,直接在列表上进行迭代不需要预先生成索引。

答案 1 :(得分:0)

在您提供的JSON中,有效负载的外部列表中只有一个元素。但是代码试图访问该列表的前5个元素,这些元素不存在。

尽量避免直接访问像di['key']这样的列表中的值,而是使用'di.get('key','default')`,除非您确定它存在。

要遍历keys-values并获取'firstKey'下的值的长度,请使用以下代码:

for payload in json_response.get('payload',[]) :
    # Length of values under firstKey
    print(len(payload.get('firstKey',[])))
    # To access nested Keys
    for i in payload.get('firstKey',[]) :
        for k,v in i.items() :
            print(k,':',v)