Ваш код создает впечатление, что вы просто написали несколько случайных строк, не задумываясь о структуре, по которой вы вообще пытаетесь ориентироваться.
Сначала давайте посмотрим, где находятся ваши значения: они содержатся в один длинный сложенный скаляр . Это будет загружено в строку в Python, вы не можете напрямую запрашивать значения через их имена, потому что YAML не понимает, что это параметры cmdline. Итак, давайте напишем функцию, которая извлекает значение из этой строки:
def get_cmdline_arg(name, cmdline):
found = False
for item in cmdline.split():
if found: return item
# if the current item is the searched name, the next item will be
# its value
found = (item == name)
return "<not found>"
Теперь, имея это, давайте посмотрим, как получить строку my_arguments
из структуры. Ваш YAML имеет четыре ключа на уровне root: __global__
, __default__
, first_adhoc
и first_cron
. Данные, которые вы ищете, находятся в first_adhoc
и first_cron
, поэтому давайте начнем с итерации этих двух значений (начиная с загруженного значения dictionary
из вашего кода):
for k in ['first_adhoc', 'first_cron']:
arguments = dictionary[k]['my_arguments']
Теперь у нас есть my_arguments
значение, нам просто нужно получить значения аргумента:
res = {}
for name in ['my_dataset', 'my_table', 's3_temp_path']:
res[name] = get_cmdline_arg('--' + name, arguments)
print(k + ": " + str(res))