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只能为一个键分配一个值,我想使用列表和dictionary的混合,但我不知道如何用这个例子来实现这一点。

服务器嵌套在存储->存储器中,我需要将两个uuid(备份ID(分配给一个,后者是服务器ID。

我知道集合模块,通过一个简单的示例,这是可以理解的,但我在通过API提取数据的示例中遇到了如何使用它的问题。

如何提取origin并将存储在jsonuuid中的其他值分配给该键?

更重要的是,这是一个巨大的数据量,所以我不能手动添加每个值。

您可以这样做。

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

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

您可以为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唯一列表,则应使用带有set而不是list的saem方法。

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

您可以使用多个值的列表。

dict = {"Greetings": ["hello", "hi"]}

相关内容

最新更新