【问题标题】:Python Dict - Multiple Instances or "Sub-Dict" Question - Adding items programmaticallyPython Dict - 多个实例或“Sub-Dict”问题 - 以编程方式添加项目
【发布时间】:2019-09-27 21:31:33
【问题描述】:

我想在 python 中创建一个字典,它有许多我需要以编程方式填充的“子值”。此 dict 将用于将文档添加到 MongoDB 数据库。

我最终想要使用的 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',
    }
}

我尝试做的是:

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]

问题是它没有附加应用程序的每个实例,它只是覆盖了一个“子字典”(这就是你所说的吗?)

【问题讨论】:

  • 您对host_dict 的期望值不是有效的 Python(试试吧!)。

标签: python python-3.x loops dictionary


【解决方案1】:

如果我错了,请纠正我,但 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 键来轻松创建值

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

#List to store list of dictionaries
li = []
#Iterate through apps
for app in apps:
    #Create a dictionary for app and append to the list
    dct = {}
    dct['name'] = app[0]
    dct['version'] = app[1]
    dct['uninstall_string'] = app[2]
    dct['install_date'] = app[3]
    dct['install_location'] = app[4]
    dct['publisher'] = app[5]
    li.append(dct)

#Assign the list
host_dict['installed_applications'] = li

或者让代码更短,我们可以这样做

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

【讨论】:

  • 很好 - 我需要每个都有一个字典的列表。谢谢朋友!
  • 感谢@chamber 的接受,我还添加了一个更短的代码版本!
【解决方案2】:

您的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'] 将有一个列表,其中每个值都是一个app 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',
    }]
}

【讨论】:

    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多