gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:31:07 27 4
gpt4 key购买 nike

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

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

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

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

关于python - 如何在Python中将字典键拆分为多个单独的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37589975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com