如何在python中将字典键拆分为多个单独的键



在Python中,我使用RRDTool Python包装器将值存储和读取到RRD数据库中。

RRDTool for Python 是 rrdtool 基于 C 的源代码/命令行实用程序的包装器。

创建数据库后,我想使用 python 命令读出它的标头:

header_info = rrdtool.info('database_file_name.rrd') 

这等于命令行实用程序:

rrdtool info database_file_name.rd

并且会打印这样的标题信息:

filename = "database_file_name.rrd"
rrd_version = 5
...
ds[datasource_identifier_1].index = 0
ds[datasource_identifier_1].type = "GAUGE"
...
ds[datasource_identifier_2].index = 1
ds[datasource_identifier_2].type = "GAUGE"
...
在python中

,命令行工具的输出被包装在一个具有以下模式的大字典中:

key: value
"filename" : "database_file_name.rrd"
"ds[datasource_identifier_1].index" : "0"
"ds[datasource_identifier_2].type" : "GAUGE"

我现在正试图弄清楚如何拆分该字典,以便我可以像这样访问它:

index = dictionary["ds"]["datasource_identifier_1"]["index"]

但是我不知道如何使用python来做到这一点。我想这可以通过迭代原始字典来完成,并使用"[","]"和"."作为触发器拆分这些键,然后创建一个新字典。

如何在 Python 中做到这一点?

我们需要解析键以查看它们是否看起来像ds[some_identifier].type等。

def process_dict(dictionary):
    import re    
    rgx = re.compile(r"^(ds)[(.+?)].(index|type)$")
    processed = {}
    for k, v in dictionary.items():
        # does k have the format ds[some_key].index etc
        m = rgx.search(k)
        if m:
            # create the embedded path
            ds, ident, attr = m.groups()
            processed.setdefault(ds, {}).setdefault(ident, {})[attr] = v
        else:
            processed[k] = v
    return processed

相关内容

  • 没有找到相关文章

最新更新