Python:如何将多个值赋给一个键

2024-09-29 23:17:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用API提取数据并检索服务器和备份的列表。有些服务器有多个备份。这就是我如何获得所有具有backaup 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

但是我发现每个服务器都有不止一个值。因为dictionary只能为一个键分配一个值,所以我想使用list和dictionary的混合,但是我不知道如何使用这个示例。你知道吗

服务器嵌套在存储中->;存储,我需要将两个uuid作为备份ID分配给一个作为服务器ID

我知道collections模块,通过一个简单的示例可以理解,但是在我的示例中如何通过API提取数据时遇到了一个问题。你知道吗

如何提取origin并将存储在jsonuuid中的其他值赋给这个键?你知道吗

更重要的是,它是一个庞大的数据量,所以我不能添加每一个值手动。你知道吗


Tags: 数据服务器apijson示例列表uuidstorage
3条回答

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': 'one'}, {'id': 2, 'value': 'two'}, {'id': 3, 'value': 'three'}, {'id': 4, 'value': 'new'}]}

您可以为origin键存储uuid列表。你知道吗

我建议有以下两种方法:

  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。你知道吗

你可以这样做。你知道吗

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'])

但这可能被认为是可读性较差。你知道吗

相关问题 更多 >

    热门问题