Извлечение значений из вложенной словарной структуры в Python - PullRequest
0 голосов
/ 11 декабря 2018

Мой код и структура данных, которая приводит к выводу ниже, выглядит следующим образом:

    Actions = set()

     # loop through and obtain a list of files and commands
    for item in d['server']:
         Actions.add('{action}'.format(**item))


     print(Actions)
     commands = list(Actions)

     commands = list(Actions)

Вывод:

     Actions = {"{'command1': ['uptime'], 'path': ['/var/log/syslog']}", "{'command1': ['df -h'], 'path': ['/var/log/auth.log']}"}

Мне нужно извлечь команды и пути отдельно и что-то вродеэто не работает

    print(commands[0]['command1'])

    Traceback (most recent call last):

Файл "read_shell_yaml.py", строка 46, в печатном виде (команды [0] ['command1']) TypeError: строковые индексы должны быть целыми числами

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Если вам нужно сделать это так, как вы это сделали, вы можете в конце:

import json
content = json.loads(command[0].replace("'", '"'))
content['command1'] #prints ['df -h']
0 голосов
/ 11 декабря 2018

Вы форматируете свой item dict в строку с помощью метода str.format, который не позволяет последнему коду извлекать элементы из dict.

Для вашей цели, более подходящая структура данных для *Вместо этого 1005 * будет указателем, индексируемым командой:

Actions = {}
for item in d['server']:
    Actions[items.pop('command1')] = item

, так что вы сможете позже перебирать элементы указания Actions следующим образом:

for command, properties in Actions.items():
    print(command, properties['path'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...