Python:如何为一个键分配多个值
我使用API提取数据并检索服务器和备份列表。某些服务器有多个备份。这就是我如何获得所有具有backaup ID的服务器的列表Python:如何为一个键分配多个值,python,json,api,data-extraction,Python,Json,Api,Data Extraction,我使用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如下所示: { "stor
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
我知道集合模块,通过一个简单的例子,这是很容易理解的,但是我在通过API提取数据的例子中遇到了一个问题
如何提取源文件,并将jsonuuid中存储的其他值分配给该键
更重要的是,它是一个庞大的数据量,因此我无法手动添加每个值。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'}]}
你可以这样做
从集合导入defaultdict
备份=默认dict(列表)
对于备份列表['storage']['storage']中的u:
srvuuidorg=u[“原点”]
备份\u uuid=u['uuid']
备份[srvuidorg]。追加(备份\u uuid)
注意,您可以像这样简化循环
从集合导入defaultdict
备份=默认dict(列表)
对于备份列表['storage']['storage']中的u:
备份[u['origin']]。追加(u['uuid'])
但这可能被认为是可读性较差 您可以为
原点
键存储uuid
列表
我有以下两种方法:
列表
,以便首先访问源文件
,然后附加到该列表:backup={}
对于备份列表['storage']['storage']中的u:
srvuuidorg=u[“原点”]
备份\u uuid=u['uuid']
如果不是备份。获取(srvuidorg):
备份[srvuidorg]=[]
备份[srvuidorg]。追加(备份\u uuid)
defaultdict
collection,它在引擎盖下基本上也为您提供了相同的功能:从集合导入defaultdict
备份=默认dict(列表)
对于备份列表['storage']['storage']中的u:
srvuuidorg=u[“原点”]
备份\u uuid=u['uuid']
备份[srvuidorg]。追加(备份\u uuid)
在我看来,最后一条路更优雅。
如果需要存储
uuid
唯一列表,则应使用saem方法,而不是list
,将uuid
设置为,您可以对多个值使用列表
dict = {"Greetings": ["hello", "hi"]}
字典列表如何?{key:[valueDict1,valueDict2]}
不幸的是,这是一个巨大的数据量,我无法手动分配所有内容。这些值(uuid)应该通过迭代自动添加到key(origin)中,这对我来说是个问题。你能随机生成uuid并通过循环自动分配它们吗?这正是我想要的!非常感谢你!