我看了几个问题,但没有找到用这种不规则结构转换嵌套字典的答案:
a = {'Cat0': {'brand1': {'b': 0.78, 'c': 1}, 'brand2': {'k': 1, 'c': 1}}, 'Cat1': {'brand4': {'b': 10, 's': 0.0}}, 'Cat2': {'brand1': {'j': 1, 'c': 0.0}}}
到下面的pandas数据框架:
Category Brand Peer Value
0 Cat0 brand1 b 0.78
1 Cat0 brand1 c 1
2 Cat0 brand2 k 1
3 Cat0 brand2 c 1
4 Cat1 brand4 b 10
5 Cat1 brand4 s 0.0
6 Cat2 brand1 j 1
7 Cat2 brand1 c 0.0
字典将是巨大的,所以我正在寻找最有效的解决方案。你能帮我吗?
使用理解来平化字典是非常简单的:
df = pd.DataFrame([[k, k1, k2, v]
for k, d in a.items()
for k1, d1 in d.items()
for k2, v in d1.items()],
columns=['Category', 'Brand', 'Peer', 'Value'])
使用生成器而不是推导式(将在实际数据上进行测试)可能会获得更好的效率:
df = pd.DataFrame(([k, k1, k2, v]
for k, d in a.items()
for k1, d1 in d.items()
for k2, v in d1.items()),
columns=['Category', 'Brand', 'Peer', 'Value'])
输出:
Category Brand Peer Value
0 Cat0 brand1 b 0.78
1 Cat0 brand1 c 1.00
2 Cat0 brand2 k 1.00
3 Cat0 brand2 c 1.00
4 Cat1 brand4 b 10.00
5 Cat1 brand4 s 0.00
6 Cat2 brand1 j 1.00
7 Cat2 brand1 c 0.00