首页 > 解决方案 > 如何从 yaml 生成的字典中动态打印信息?

问题描述

也许我有一个小问题,但我无法解决。我对python比较陌生,如果可以的话,请帮帮我。我有一个用于配置的 yaml 文件。像这样的东西:

---
prod:
  app1:
    hosts:
      - host1
      - host2
  app2:
    hosts:
      - host3
      - host4

我想用这个 yaml 来生成一个菜单。我的问题是,我无法从数据结构中打印详细信息。据我所知,如果我在 yaml 中阅读,结果将是一本字典。:

def read_env():
    with open("env.yaml", 'r') as stream:
        try:
            data = yaml.load(stream)
            return data
        except yaml.YAMLError as exc:
            print(exc)
        finally:
            stream.close()

如果我手动打印一些东西,那没关系:

print(data["prod"]["app1"]["hosts"])

这行代码将为我们打印“host1,host2”。我怎么能做这样的事情?

mylist = []
mylist.append(prod)
mylist.append(app2)
mylist.append(hosts)

print(data[mylist])

提前感谢您的回答!

标签: yamlpython-3.6

解决方案


好的。我找到了一个简单的解决方案:

mylist = ["prod", "app1", "hosts"]
tmp = ""
for i, item in enumerate(mylist):
  if(i == 0):
    tmp = data[item]
  else:
    tmp = tmp[item]
print(tmp)

此代码将返回“host1,host2”,并且还能够动态处理。

如果您有更清洁的解决方案,请告诉我。预先感谢!


推荐阅读