为键中的每个斜杠解开字典的节点

问题描述

我有一个字典:

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}}}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...