python - 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
但后来我发现每台服务器都有不止一个值。由于字典只能为一个键分配一个值,因此我想使用列表和字典的某种混合,但我无法通过这个示例弄清楚如何做到这一点。
服务器嵌套在storages -> storage中,我需要将几个作为备份 ID的uuid分配给一个作为服务器 ID的源。
我知道集合模块,并且通过一个简单的示例可以理解,但是我有一个问题,如何在我的示例中使用它来通过 API 提取数据。
如何提取原点并将存储在 json uuid中的其他值分配给该键?
更重要的是,它是海量数据,所以我无法手动添加每个值。
解决方案
你可以做这样的事情。
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'])
但这可能被认为可读性较差。
推荐阅读
- javascript - React无法读取未定义的属性'setState'
- linux - perf 在 Linux 中运行进程
- vivado - 卡在 API XAxiDma_BdRingFromHw 中,为什么 S2MM 块描述符的 Completed 位没有设置?
- css - 如何使用 print-CSS 拆分长 HTML 表格,以便第一页表格中的拆分为页面底部的 div 留出空间?
- pyinstaller - 在EXE中使用PyInstaller打包数据文件
- c++ - 通过 lambda 部分专门化类模板
- c# - 如何正确反序列化 Json DateTimeOffset?
- ruby - 如何将字符串拆分为 n 个子字符串?
- php - 显示错误:上传路径似乎无效
- c# - 有没有办法禁用所有 WPF 应用程序的缩放,即使 Windows 在每个监视器或系统范围内都有一定的缩放比例?