python - Python 3 字典查找所有元素及其关键路径
问题描述
给定一个像下面这样的字典,我想做的是找到所有元素(键+数据)及其完整的根键路径。如果数据是字符串,则返回数据和完整的密钥根。如果数据是一个字典,那么它返回该字典内的第一个键作为数据和完整的键根。
a = {
"level1_key": {
"level2_key": {
"level3_key": {
"status": "down"
}
}
}
}
例如,第一个键没有根,它的数据是一个字典,所以将当前键作为数据返回,没有父键。
Key = None
Data = level1_key
level2_key 的数据是一个字典,所以返回当前键和它的父母。
Key = level1_key
Data = level2_key
Key = level1_key.level2_key
Data = level3_key
Key = level1_key.level2_key.level3_key
Data = status
最后一个键数据是一个字符串,所以将字符串作为数据返回,它的所有键
Key = level1_key.level2_key.level3_key.status
Data = down
因为字典中有 5 个元素(4 个键和 1 个字符串),所以我最终会得到 5 个键路径和数据的元组。
这背后的原因是每个元素都代表配置,如果说“状态”需要更改为“向下”,实际需要更改的是:level1_key.level2_key.level3_key.status
我写的一个非工作示例,它获取所有字符串、它们的键和部分根路径,但它并没有完全获取所有根键
current_key = ""
key_list = []
def thing(data):
global current_key
global key_list
if isinstance(data, dict):
for key, value in data.items():
current_key = key
key_list.append(key)
thing(value)
elif isinstance(data, str):
print(f"Key: {current_key}")
print(f"Key List: {key_list}")
print(f"Data: {data}")
print("##########")
key_list = []
Data is:
{
"100": {
"status": "down"
},
"200": {
"status1": "up",
"status2": "down",
"status3": {
"nested": "more_data"
}
}
}
Key: status
Key List: [100, 'status']
Data: down
##########
Key: status1
Key List: [200, 'status1']
Data: up
##########
Key: status2
Key List: ['status2']
Data: down
##########
Key: nested
Key List: ['status3', 'nested']
Data: more_data
##########
例如,最后一位“more_data”缺少根键 200。
解决方案
推荐阅读
- python - 在python中接受多个输入
- node.js - 2k 并发连接后 Socket.io 挂起
- sql-server - OPENJSON - 如何从 SQL Server 中保存为 NVARCHAR 的 JSON 对象中提取值
- android - 如何将位图从第二个活动共享到第一个活动
- solr - 使用 solr 和 hybris 进行拼写检查
- php - 将 .htaccess mod_rewrite 转换为 nginx 指令时出现问题
- flutter - 当PageView onPageChanged颤动时如何将数据传递给TabBar类
- r - 透视/重塑数据
- javascript - 如何在饼图顶点图表上显示标签和值
- python - 我的 Ordered Dict 没有按预期工作