在 KeyError 中使用嵌套 for 循环从嵌套字典中检索项目

我需要系统地访问嵌套在第 3 级字典中的列表中的字典,如下所示:


responses = {'1': {'responses': [{1st dict to be retrieved}, {2nd dict to be retrieved}, ...]},

             '2': {'responses': [{1st dict to be retrieved}, {2nd dict to be retrieved}, ...]}, ...}

我需要取消嵌套并将这些嵌套的字典转换为数据框,因此最终结果应如下所示:


responses = {'1': df1,

             '2': df2, ...}

为了实现这一点,我构建了一个 for 循环,以便遍历第一级的所有键。在该循环中,我使用另一个循环将嵌套字典中的每个项目提取到一个名为的新空列表中responses_df:


responses_dict = {}


for key in responses.keys():

    for item in responses[key]['responses']:

        responses_dict[key].update(item)

但是,我得到:


KeyError: '1'

如果我在字典中的一个键上单独使用内部循环,它就可以工作,但这并没有真正帮助我,因为数据来自 API,并且必须在生产中每隔几分钟动态更新一次。


将结果转换为数据帧的 nex 循环如下所示:


for key in responses_dict:

     responses_df[key] = pd.DataFrame.from_dict(responses_dict[key], orient='index')

但是自从第一次操作失败以来,我还没有尝试过。


跃然一笑
浏览 247回答 3
3回答

qq_遁去的一_1

试试这个:from collections import defaultdict      responses_dict = defaultdict(dict) # instead of {}然后你的代码就可以工作了。

LEATH

其实responses_dict[key]哪里key=1不存在。所以,当你只是做print(responses_dict[key])你会得到相同的错误,1是不是一个关键dict,并update没有使用,因为它应该是。尝试以下语法:responses_dict = {}for key in responses.keys():    print(key)    for item in responses[key]['responses']:        responses_dict.update(key = item)

饮歌长啸

试试这个:responses = {'1': {'responses': [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}]},             '2': {'responses': [{'e': 5}, {'f': 6}]}}result = {k: pd.DataFrame(chain.from_iterable(v['responses'])) for k, v in responses.items()}for df in result.values():    print(df, end='\n\n')输出:   00  a1  b2  c3  d   00  e1  f
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python