Python:如何给一个键赋多个值
Python: how to assign multiple values to one key
我使用 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
但后来我发现每台服务器都有不止一个值。由于字典只能将一个值分配给一个键,所以我想使用列表和字典的某种混合体,但我无法弄清楚如何在这个例子中做到这一点。
服务器嵌套在 storages->storage 中,我需要分配几个 uuid 这是一个 origin 的备份 ID,它是服务器 ID。
我知道 collections 模块,通过一个简单的例子,它是很容易理解的,但是我有一个问题如何在我的例子中使用它通过 [=44= 提取数据].
如何提取 origin 并将存储在 json uuid?
中的其他值分配给此键
而且数据量很大,所以我无法手动添加每个值。
A 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'}]}
你可以这样做。
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
列表。
我推荐以下两种方式:
- 为第一次访问
origin
创建空 list
,然后附加到它:
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)
- 使用
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 方法
您可以为多个值使用一个列表。
dict = {"Greetings": ["hello", "hi"]}
我使用 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
但后来我发现每台服务器都有不止一个值。由于字典只能将一个值分配给一个键,所以我想使用列表和字典的某种混合体,但我无法弄清楚如何在这个例子中做到这一点。
服务器嵌套在 storages->storage 中,我需要分配几个 uuid 这是一个 origin 的备份 ID,它是服务器 ID。
我知道 collections 模块,通过一个简单的例子,它是很容易理解的,但是我有一个问题如何在我的例子中使用它通过 [=44= 提取数据].
如何提取 origin 并将存储在 json uuid?
中的其他值分配给此键而且数据量很大,所以我无法手动添加每个值。
A 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'}]}
你可以这样做。
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
列表。
我推荐以下两种方式:
- 为第一次访问
origin
创建空list
,然后附加到它:
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)
- 使用
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
.
您可以为多个值使用一个列表。
dict = {"Greetings": ["hello", "hi"]}