Как распечатать информацию динамически из словаря, сгенерированного yaml? - PullRequest
0 голосов
/ 04 ноября 2019

Может быть, у меня есть тривиальная проблема, но я не могу пройти. Я относительно новичок в 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])

Спасибо заранее за ваши ответы!

1 Ответ

0 голосов
/ 04 ноября 2019

Хорошо. Я нашел простое решение:

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", а также сможет динамически обрабатывать.

Если у вас есть более чистое решение, пожалуйста,я знаю. Заранее спасибо!

...