python - Python遍历列表以获取字典值
问题描述
我有这个列表对象,我想递归迭代,直到找到具有“主机名”值的“节点”并通过它的代码计算状态。问题是我可以随机在彼此内部拥有多个“节点”。
免责声明:我不是开发人员,只是一个爱好者,所以放轻松!:)
我已经尝试了一堆循环(for、while 等)调用一些函数来验证节点的内容,但是当我在彼此内部有多个节点时它让我失败了。
任何帮助将不胜感激,干杯,
[
u"MY CONTAINER",
u"MY APP",
"0",
"",
{
"title": u"MyApp",
"state": 0,
"nodes": [
{
"title": u"AppStuff01",
"state": 0,
"nodes": [
{
"title": u"HOSTX",
"state": 0,
"nodes": [
{
"title": u"CPU ",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Memory ",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
],
"currently_active": True,
},
{
"title": u"HOSTX",
"state": 0,
"nodes": [
{
"title": u"CPU ",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Memory ",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
],
"currently_active": True,
},
],
"currently_active": True,
},
{
"title": u"AppStuff02",
"state": 0,
"nodes": [
{
"title": u"MySubApp",
"state": 0,
"nodes": [
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
"nodes": [
{
"title": u"Another Random Node",
"state": 0
"nodes": [
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
],
},
],
],
"currently_active": True,
}
],
"currently_active": True,
},
],
"currently_active": True,
},
"0",
"0",
]
解决方案
您可以递归地检查您的列表以查找nodes
属性hostname
:
(PS:您的原始列表有一些我必须修复的语法错误)
如果您的列表是这样的变量:
my_list = [
u"MY CONTAINER",
u"MY APP",
"0",
"",
{
"title": u"MyApp",
"state": 0,
"nodes": [
{
"title": u"AppStuff01",
"state": 0,
"nodes": [
{
"title": u"HOSTX",
"state": 0,
"nodes": [
{
"title": u"CPU ",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Memory ",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
],
"currently_active": True,
},
{
"title": u"HOSTX",
"state": 0,
"nodes": [
{
"title": u"CPU ",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Memory ",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
],
"currently_active": True,
},
],
"currently_active": True,
},
{
"title": u"AppStuff02",
"state": 0,
"nodes": [
{
"title": u"MySubApp",
"state": 0,
"nodes": [
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
"nodes": [
{
"title": u"Another Random Node",
"state": 0,
"nodes": [
{
"title": u"Service Y",
"hostname": u"HOSTX",
"state": 0,
},
],
},
],
},
],
"currently_active": True,
}
],
"currently_active": True,
},
],
"currently_active": True,
},
"0",
"0",
]
然后你可以使用这样的函数:
def find_nodes(to_check):
nodes = []
if type(to_check).__name__ != "list":
return nodes
for element in to_check:
if type(element).__name__ == "dict":
if "hostname" in element:
nodes.append(element)
if "nodes" in element:
nodes.extend(find_nodes(element["nodes"]))
return nodes
print(find_nodes(my_list))
推荐阅读
- nothing - PHP - 我怎样才能拥有所有 php 代码的列表?
- pine-script - 卷值标签未显示在垂直卷的值栏上
- elasticsearch - Elasticsearch 不模糊
- javascript - 如何将滑块值与另一个值相加?
- javascript - 如何在 reactjs 中使用 Object Key 和 value 显示值?
- python - 手动将误差线添加到 seaborn 线标记图
- python - python中20维numpy矩阵的内存错误
- javascript - 重复函数时 setTimeout 的问题
- winforms - 触发属性更改时,具有数据绑定的表单元素不刷新
- c++ - 强制从子类覆盖父类的所有虚函数