1

我有一个由 JSON 结果组成的 python 字典。该字典包含一个嵌套字典,其中包含一个包含嵌套字典的嵌套列表。还在我这儿?这是一个例子:

{'hits':{'results':[{'key1':'value1', 
                    'key2':'value2', 
                    'key3':{'sub_key':'sub_value'}},
                   {'key1':'value3',
                    'key2':'value4',
                    'key3':{'sub_key':'sub_value2'}}
                  ]}}

我想从字典中得到的sub_vale是每个sub_key并将其存储在不同的列表中。无论我尝试什么,我都会不断出错。

这是我最后一次尝试:

inner_list=mydict['hits']['results']#This is the list of the inner_dicts

index = 0
    for x in inner_list:
        new_dict[index] = x[u'sub_key']
        index = index + 1

print new_dict

它打印了前几个结果,然后开始返回原始字典中的所有内容。我无法理解它。如果我用语句替换该new_dict[index]行,print它将完美地打印到屏幕上。真的需要一些输入!

for x in inner_list:
    print x[u'sub_key']
4

5 回答 5

1

x是一本字典

在第一次迭代for x in ...

x={'key1':'value1', 
                'key2':'value2', 
                'key3':{'sub_key':'sub_value'}},

请注意,没有 key sub_keyinx而是 inx['key3']['sub_key']

于 2012-07-09T18:17:32.520 回答
1
>>> dic={'hits':{'results':[{'key1':'value1', 
                    'key2':'value2', 
                    'key3':{'sub_key':'sub_value'}},
                   {'key1':'value3',
                    'key2':'value4',
                    'key3':{'sub_key':'sub_value2'}}
                  ]}}
>>> inner_list=dic['hits']['results']
>>> [x[y]['sub_key'] for x in inner_list for y in x if isinstance(x[y],dict)]
['sub_value', 'sub_value2']

如果你确定它key3总是包含 inner dict,那么:

>>> [x['key3']['sub_key'] for x in inner_list]
['sub_value', 'sub_value2']

不使用List comprehensions

>>> lis=[]
>>> for x in inner_list:
    for y in x:
        if isinstance(x[y],dict):
            lis.append(x[y]['sub_key'])


>>> lis
['sub_value', 'sub_value2']
于 2012-07-09T18:21:28.733 回答
1

在做了一些假设之后:

[e['key3']['sub_key'] for e in x['hits']['results']]

要更改每个实例:

for e in x['hits']['results']:
 e['key3']['sub_key'] = 1
于 2012-07-09T18:24:07.620 回答
1

索引错误来自大于的new_dict[index]大小。indexnew_dict

应该考虑列表理解。它通常更好,但有助于理解它是如何在循环中工作的。试试这个。

new_list = []
for x in inner_list:
    new_list.append(x[u'sub_key'])

print new_list

如果您想坚持使用 dict,但使用 index 作为键,请尝试以下操作:

index = 0
new_dict = {}
    for x in inner_list:
        new_dict[index] = x[u'sub_key']
        index = index + 1

print new_dict

好的,根据您在下面的评论,我认为这就是您想要的。

inner_list=mydict['hits']['results']#This is the list of the inner_dicts

new_dict = {}
for x in inner_list:
    new_dict[x['key2']] = x['key3']['sub_key']

print new_dict
于 2012-07-09T18:38:06.497 回答
1

您忘记了嵌套级别。

for x in inner_list:
    for y in x:
        if isinstance(x[y], dict) and 'sub_key' in x[y]:
            new_dict.append( x[y]['sub_key'] )
于 2012-07-09T18:38:19.013 回答