我需要系统地访问嵌套在字典第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}, ...]}, ...}
我需要取消嵌套并将这些嵌套的dict转换为数据帧,因此最终结果应如下所示:
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')
但是自从第一次操作失败以来,我还没有尝试过。
答案 0 :(得分:1)
尝试一下:
from collections import defaultdict
responses_dict = defaultdict(dict) # instead of {}
然后您的代码即可使用。
答案 1 :(得分:0)
实际上this.application = this.application.splice(i, 1);
的地方responses_dict[key]
不存在。
因此,当您简单地执行key=1
时,会遇到相同的错误,print(responses_dict[key])
不是该1
的键,并且dict
并未得到应有的使用。 / p>
尝试以下语法:
update
答案 2 :(得分:0)
我更喜欢在更新字典时使用字典。
如果使用现有密钥进行更新,则该密钥的值将被更新。 如果您使用新的键值对更新,该对将被添加到该字典中。
>>>d1 = {1: 10, 2:20}
>>>d1.update({1:20})
>>>d1
>>>{1: 20, 2:20}
>>>d1.update({3:30})
>>>d1
>>>{1: 20, 2:20, 3:30}
尝试通过以下方式修正您的电话线路:
responses_dict = {}
for key in responses.keys():
for item in responses[key]['responses']:
responses_dict.update({key: item})
因此,基本上,使用字典来更新字典,使其更具可读性和简便性。
答案 3 :(得分:0)
尝试一下:
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')
输出:
0
0 a
1 b
2 c
3 d
0
0 e
1 f