Python:如何为一个键分配多个值

我使用API​​提取数据并检索服务器和备份列表。某些服务器具有多个备份。这是我获取所有具有备份ID的服务器的列表的方法。

bkplist = requests.get('https://heee.com/1.2/storage/backup')
bkplist_json = bkplist.json()
backup_list = bkplist.json()
backupl = backup_list['storages']['storage']

Json看起来像这样:

{
   "storages": {
      "storage": [
         {
            "access": "","created": "","license":,"origin": "01165","size":,"state": "","title": "","type": "backup","uuid": "01019","zone": ""
         },

首先,我创建一个字典来存储此数据:

backup = {}
for u in backup_list['storages']['storage']:
    srvuuidorg = u['origin']
    backup_uuid = u['uuid']
    backup[srvuuidorg] = backup_uuid

但是后来我发现每台服务器都有多个值。由于字典只能为一个键分配一个值,因此我想使用列表和字典的某种混合形式,但是我无法弄清楚在此示例中如何做到这一点。

服务器嵌套在存储-> 存储中,我需要将几个 uuid 分配给一个 origin ,即服务器ID。

我了解 collections 模块,并通过一个简单的示例可以理解,但是我在通过API提取数据的示例中如何使用此模块却遇到了问题。

如何提取起源并将其他存储在json uuid 中的值分配给此键?

此外,这是海量数据,因此我无法手动添加每个值。

cbslhw628 回答:Python:如何为一个键分配多个值

您可以执行以下操作。

from collections import defaultdict

backup = defaultdict(list)
for u in backup_list['storages']['storage']: 
    srvuuidorg = u['origin'] 
    backup_uuid = u['uuid'] 
    backup[srvuuidorg].append(backup_uuid)

请注意,您可以像这样简化循环。

from collections import defaultdict

backup = defaultdict(list)
for u in backup_list['storages']['storage']:
    backup[u['origin']].append(u['uuid'])

但是,这可能被认为可读性较差。

,

您可以存储uuid键的origin列表。

我建议以下两种方式:

  1. 创建空的list,以便首先访问origin,然后附加到它:
backup = {}
for u in backup_list['storages']['storage']:
    srvuuidorg = u['origin']
    backup_uuid = u['uuid']
    if not backup.get(srvuuidorg):
        backup[srvuuidorg] = []
    backup[srvuuidorg].append(backup_uuid)
  1. 使用defaultdict集合,它在幕后基本上为您完成了同样的工作:
from collections import defaultdict


backup = defaultdict(list)
for u in backup_list['storages']['storage']:
    srvuuidorg = u['origin']
    backup_uuid = u['uuid']
    backup[srvuuidorg].append(backup_uuid)

在我看来,最后一种方式更优雅。 如果您需要存储uuid个唯一列表,则应将saem方法与set而非list一起使用。

,

json允许在键中包含一个数组:

var= {
  "array": [
    {"id": 1,"value": "one"},{"id": 2,"value": "two"},{"id": 3,"value": "three"}
  ]
}

print var
{'array': [{'id': 1,'value': 'one'},{'id': 2,'value': 'two'},{'id': 3,'value': 'three'}]}

var["array"].append({"id": 4,"value": "new"})

print var

{'array': [{'id': 1,'value': 'three'},{'id': 4,'value': 'new'}]}

,

您可以将多个值用于列表。

dict = {"Greetings": ["hello","hi"]}
本文链接:https://www.f2er.com/3160096.html

大家都在问