问题描述
我有一个字典:
a = {
"group_a/category_a/metric_a": 5,"group_a/category_a/metric_b": 4,"group_a/category_b/metric_a": 3,"group_a/category_b/metric_b": 2,"group_b/category_a/metric_d": 1
}
我想通过创建一个嵌套视图来解开节点,该嵌套视图由每个斜杠分隔,结果如下:
b = {
"group_a": {
"category_a": {
"metric_a": 5,"metric_b": 4
},"category_b": {
"metric_a": 3,"metric_b": 2
},"group_b": {
"category_a": {
"metric_d": 1
}
}
}
我们如何从a转到b?尝试将上面的字典发布到Firebase时遇到了这个问题,因为节点group_a/category_a/metric_a
不被接受,而嵌套的字典却被允许。
解决方法
浏览,将每个键拆分为键列表,根据需要创建子词典...
from pprint import pprint
a = {
"group_a/category_a/metric_a": 5,"group_a/category_a/metric_b": 4,"group_a/category_b/metric_a": 3,"group_a/category_b/metric_b": 2,"group_b/category_a/metric_d": 1
}
b = {}
for k,v in a.items():
dct = b
keys = k.split("/")
for key in keys[:-1]:
if key not in dct:
dct[key] = {}
dct = dct[key]
dct[keys[-1]] = v
pprint(b)
礼物:
{'group_a': {'category_a': {'metric_a': 5,'metric_b': 4},'category_b': {'metric_a': 3,'metric_b': 2}},'group_b': {'category_a': {'metric_d': 1}}}