Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何为一个键分配多个值_Python_Json_Api_Data Extraction - Fatal编程技术网

Python:如何为一个键分配多个值

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

我使用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

我知道集合模块,通过一个简单的例子,这是很容易理解的,但是我在通过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并通过循环自动分配它们吗?这正是我想要的!非常感谢你!