Python Dict - множественные экземпляры или вопрос «Sub-Dict» - программное добавление элементов - PullRequest
1 голос
/ 10 мая 2019

Я хочу создать dict в python, который имеет ряд «подзначений», которые мне нужны для программного наполнения.Этот dict будет использоваться для добавления документа в базу данных MongoDB.

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

    host_dict = {
    'installed_applications':
    {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    }
    {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    }
    {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    }
        {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    }
}

я пытался сделать следующее:

host_dict = {}
apps = get_installed_apps(host)
host_dict['installed_applications'] = {}
for app in apps:
    host_dict['installed_applications']['name'] = app[0]
    host_dict['installed_applications']['version'] = app[1]
    host_dict['installed_applications']['uninstall_string'] = app[2]
    host_dict['installed_applications']['install_date'] = app[3]
    host_dict['installed_applications']['install_location'] = app[4]
    host_dict['installed_applications']['publisher'] = app[5]

Проблема в том, что это не такдобавляйте каждый экземпляр приложения, которое он просто перезаписывал, одним «поддиктом» (это то, что вы бы назвали?)

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Поправьте меня, если я ошибаюсь, но host_dict не является допустимым словарем. Я предполагаю, что вы пытались создать словарь с ключом installed_applications и значением в виде списка, поэтому он будет выглядеть примерно так

host_dict = {
    'installed_applications':
    [{
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    },
    {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    },
    {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    },
        {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    }]
}

В этом случае вы можете легко создать значения, выполнив итерацию по apps, добавив необходимые пары ключ-значение в список, а затем присвоив этому списку installed_applications ключ

* 1009.*

Или, сделав код короче, мы можем сделать

host_dict = {}
apps = get_installed_apps(host)
host_dict['installed_applications'] = {}

#List to store list of dictionaries
li = []

#List of keys for app
app_keys = ['name', 'version', 'uninstall_string', 'install_date', 'install_location', 'publisher']

#Iterate through apps
for app in apps:
    dct = {}
    #Make the dictionary
    for idx, item in enumerate(app):
        dct[app_keys[item]] = item

    li.append(dct)

#Assign the list
host_dict['installed_applications'] = li
0 голосов
/ 10 мая 2019

Ваш пример host_dict не является допустимой структурой python, но вы могли бы исправить это, указав значение installed_applications в качестве списка, чтобы вы могли добавлять элементы в этот список, каждый из которых является диктом, например:

apps = get_installed_apps(host)
host_dict = {'installed_applications': []}
for app in apps:
    new_app = {
        'name': app[0],
        'version': app[1],
        'uninstall_string': app[2],
        'install_date': app[3],
        'install_location': app[4],
        'publisher': app[5]
    }
    host_dict['installed_applications'].append(new_app)

В конце host_dict['installed_applications'] будет список, в котором каждое значение является приложением dict, похожим на это:

host_dict = {
'installed_applications': [
    {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    },
    {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    },
    {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    },
    {
        'name': 'alsdfasdf',
        'version': '1',
        'installed_date': '11-11-11',
    }]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...