如何在python中搜索和访问子元素和结构

2024-09-30 01:35:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python编写了这个dict(json),并希望减少它

{
   "M9D34X8ZHECCKKRU.JRTCKXETXF":{
      "priceDimensions":{
         "M9D34X8ZHECCKKRU.JRTCKXETXF.6YNURZBX9Y":{
            "unit":"GB-Mo",
            "endRange":"1024",
            "description":"$0.0240 per GB",
            "beginRange":"0",
            "pricePerUnit":{
               "USD":"0.0240000000"
            }
         },
         "M9D34X8ZHECCKKRU.JRTCKXETXF.QUZRP4P8Y4":{
            "unit":"GB-Mo",
            "endRange":"51200",
            "description":"$0.0236 per GB",
            "beginRange":"1024",
            "pricePerUnit":{
               "USD":"0.0236000000"
            }
         },
         "M9D34X8ZHECCKKRU.JRTCKXETXF.YJ98HAVVPP":{
            "unit":"GB-Mo",
            "endRange":"inf",
            "description":"$0.0228 per GB",
            "beginRange":"512000",
            "pricePerUnit":{
               "USD":"0.0228000000"
            }
         }
      },
      "sku":"M9D34X8ZHECCKKRU",
      "effectiveDate":"2019-11-01T00:00:00Z",
      "offerTermCode":"JRTCKXETXF",
      "termAttributes":{

      }
   }
}

鉴于上述结构,我只想返回没有“M9D34X8ZHECCKKRU…”标记的“priceDimensions”

{
   "priceDimensions":[
      {
         "unit":"GB-Mo",
         "endRange":"1024",
         "description":"$0.0240 per GB",
         "beginRange":"0",
         "pricePerUnit":{
            "USD":"0.0240000000"
         }
      },
      {
         "unit":"GB-Mo",
         "endRange":"51200",
         "description":"$0.0236 per GB",
         "beginRange":"1024",
         "pricePerUnit":{
            "USD":"0.0236000000"
         }
      },
      {
         "unit":"GB-Mo",
         "endRange":"inf",
         "description":"$0.0228 per GB",
         "beginRange":"512000",
         "pricePerUnit":{
            "USD":"0.0228000000"
         }
      }
   ]
}

然后,我必须在其中搜索以查找范围(介于beginRange和endRange之间)内的值的pricePerUnit


Tags: jsonunitdescriptiondictinfmousdgb
2条回答

好的,我又开始做循环了,下面是我提出的有效方法

   priceDimensions = []
    for k,v in l.items():
        for a,b in v['priceDimensions'].items():
            priceDimensions.append(b)

    print({'priceDimensions': priceDimensions})

这里是一个测试代码

import json

my_json = {
   "M9D34X8ZHECCKKRU.JRTCKXETXF":{
      "priceDimensions":{
         "M9D34X8ZHECCKKRU.JRTCKXETXF.6YNURZBX9Y":{
            "unit":"GB-Mo",
            "endRange":"1024",
            "description":"$0.0240 per GB",
            "beginRange":"0",
            "pricePerUnit":{
               "USD":"0.0240000000"
            }
         },
         "M9D34X8ZHECCKKRU.JRTCKXETXF.QUZRP4P8Y4":{
            "unit":"GB-Mo",
            "endRange":"51200",
            "description":"$0.0236 per GB",
            "beginRange":"1024",
            "pricePerUnit":{
               "USD":"0.0236000000"
            }
         },
         "M9D34X8ZHECCKKRU.JRTCKXETXF.YJ98HAVVPP":{
            "unit":"GB-Mo",
            "endRange":"inf",
            "description":"$0.0228 per GB",
            "beginRange":"512000",
            "pricePerUnit":{
               "USD":"0.0228000000"
            }
         }
      },
      "sku":"M9D34X8ZHECCKKRU",
      "effectiveDate":"2019-11-01T00:00:00Z",
      "offerTermCode":"JRTCKXETXF",
      "termAttributes":{

      }
   }
}

priceDimensions = []
for k,v in my_json.items():
  for a,b in v['priceDimensions'].items():
    priceDimensions.append(b)

new_json = {'priceDimensions': priceDimensions}

print(new_json)

和输出:

{
   "priceDimensions":[
      {
         "unit":"GB-Mo",
         "endRange":"1024",
         "description":"$0.0240 per GB",
         "beginRange":"0",
         "pricePerUnit":{
            "USD":"0.0240000000"
         }
      },
      {
         "unit":"GB-Mo",
         "endRange":"51200",
         "description":"$0.0236 per GB",
         "beginRange":"1024",
         "pricePerUnit":{
            "USD":"0.0236000000"
         }
      },
      {
         "unit":"GB-Mo",
         "endRange":"inf",
         "description":"$0.0228 per GB",
         "beginRange":"512000",
         "pricePerUnit":{
            "USD":"0.0228000000"
         }
      }
   ]
}

我有点不清楚您在寻找什么,但这应该会为您提供不带标记的json:

new_json = {'M9D34X8ZHECCKKRU.JRTCKXETXF':{'priceDimensions':[*your_json['M9D34X8ZHECCKKRU.JRTCKXETXF']['priceDimensions'].values()]}}
# or, if you want to get rid of M9D34X8ZHECCKKRU.JRTCKXETXF too
new_json = {'priceDimensions':[*your_json['M9D34X8ZHECCKKRU.JRTCKXETXF']['priceDimensions'].values()]}

编辑:因为第一个键是变量,所以让我们遍历它并转储到一个列表中

# New json with multiple first keys
your_json = {
   "M9D34X8ZHECCKKRU.JRTCKXETXF1":{
      "priceDimensions":{
         "M9D34X8ZHECCKKRU.JRTCKXETXF.6YNURZBX9Y":{
            "unit":"GB-Mo",
            "endRange":"1024",
            "description":"$0.0240 per GB",
            "beginRange":"0",
            "pricePerUnit":{
               "USD":"0.0240000000"
            }
         },
         "M9D34X8ZHECCKKRU.JRTCKXETXF.QUZRP4P8Y4":{
            "unit":"GB-Mo",
            "endRange":"51200",
            "description":"$0.0236 per GB",
            "beginRange":"1024",
            "pricePerUnit":{
               "USD":"0.0236000000"
            }
         },
         "M9D34X8ZHECCKKRU.JRTCKXETXF.YJ98HAVVPP":{
            "unit":"GB-Mo",
            "endRange":"inf",
            "description":"$0.0228 per GB",
            "beginRange":"512000",
            "pricePerUnit":{
               "USD":"0.0228000000"
            }
         }
      },
      "sku":"M9D34X8ZHECCKKRU",
      "effectiveDate":"2019-11-01T00:00:00Z",
      "offerTermCode":"JRTCKXETXF",
      "termAttributes":{

      }
   },
   "M9D34X8ZHECCKKRU.JRTCKXETXF2":{
      "priceDimensions":{
         "M9D34X8ZHECCKKRU.JRTCKXETXF.6YNURZBX9Y":{
            "unit":"GB-Mo",
            "endRange":"1024",
            "description":"$0.0240 per GB",
            "beginRange":"0",
            "pricePerUnit":{
               "USD":"0.0240000000"
            }
         },
         "M9D34X8ZHECCKKRU.JRTCKXETXF.QUZRP4P8Y4":{
            "unit":"GB-Mo",
            "endRange":"51200",
            "description":"$0.0236 per GB",
            "beginRange":"1024",
            "pricePerUnit":{
               "USD":"0.0236000000"
            }
         },
         "M9D34X8ZHECCKKRU.JRTCKXETXF.YJ98HAVVPP":{
            "unit":"GB-Mo",
            "endRange":"inf change",
            "description":"$0.0228 per GB change",
            "beginRange":"512000",
            "pricePerUnit":{
               "USD":"0.0228000000"
            }
         }
      },
      "sku":"M9D34X8ZHECCKKRU",
      "effectiveDate":"2019-11-01T00:00:00Z",
      "offerTermCode":"JRTCKXETXF",
      "termAttributes":{

      }
   }
}
# The for loop

upd8 = []

for k in your_json.keys():
  upd8.append({'priceDimensions':[*your_json[k]['priceDimensions'].values()]})

upd8

希望这对您的用例更有效

相关问题 更多 >

    热门问题