Превращение списка списков в словарь - PullRequest
0 голосов
/ 14 октября 2019

Я потратил несколько дней на изучение этой темы, рассматривая почти каждую итерацию ответов на этот вопрос, и после проб и ошибок я все еще не смог получить что-то, что работает где-то близко к тому, что мне нужно. (Я разместил мой фактический отформатированный код ниже, а не часть описания) Может быть, это просто фундаментальный недостаток моего понимания Python и понимания списков / словарей, но я надеялся, что кто-то может помочь мне или направить меня в правильном направлении, прежде чемубавить меня или закрыть билет. Сначала позвольте мне объяснить, что я пытаюсь сделать: 1. Возьмите выходные данные Netsh для IP-интерфейсов в Windows и сохраните их. 2. Управляйте списком так, чтобы я создал словарь с ключами из списка заголовков. 3. Ключи из списка заголовков будут иметь значения, которые являются другим словарем. 4. Вложенный словарь должен иметь ключи, которые имеют описание netsh (DHCP Enabled :), а значения разделены на «:».

например: {'Конфигурация для интерфейса "Ethernet 2"': {DHCP ​​Enabled: yes, InterfaceMetric: 75 ...}, {Конфигурация для интерфейса "Local Area Connection * 1" ': {DHCP ​​Enabled:да, InterfaceMetric: 25, ...},}

Вместо этого я получаю:

{'DHCP enabled': ['                         No'], 'InterfaceMetric': ['                      75'], 'IP Address': ['                           127.0.0.1'], 'Subnet Prefix': ['                        127.0.0.0/8 (mask 255.0.0.0)'], 'Default Gateway': ['                      10.1.42.1'], 'Gateway Metric': ['                       0']}

Однако, когда я применяю свою попытку понимания словаря, я получаю что-то, что выводит списокпорядка и затем не перебирает когда-либо элемент в списке и делает правильные ключи из них. В списке есть несколько элементов списка. Я не уверен, где я иду не так, и я заранее прошу прощения, если мой вопрос не сформулирован должным образом, если я не уясню.

from subprocess import check_output
import pprint

def get_all_network_info():
    s = check_output(['netsh', 'interface', 'ip', 'show', 'address']).decode('utf-8')
    s = s.splitlines()
    return s


def run_parser():
    results = []
    split_results = []
    headers = []
    s = get_all_network_info()
    for i in s:
        results.append(i.strip())
    for j in results:
        if j.find("Configuration") != -1:
            headers.append(j)
        elif j != "":
            split_results.append(j.split(":"))

    # Creating Dictionaries
    ipdict = {item[0]: item[1:] for item in split_results}
    for k, v in ipdict.items():
        for i in v:
            print(k, i.strip())

    print(ipdict)

def main():
    run_parser()


if __name__ == '__main__':
    main()

Теперь я знаю, что на самом деле я не вызывал итерацию по списку заголовков. Прямо сейчас я просто пытаюсь получить список split_results, чтобы стать правильным словарем.

...