Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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_Dictionary_Element - Fatal编程技术网

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

如何在python中搜索和访问子元素和结构,python,json,dictionary,element,Python,Json,Dictionary,Element,我用python编写了这个dict(json),并希望减少它 { "M9D34X8ZHECCKKRU.JRTCKXETXF":{ "priceDimensions":{ "M9D34X8ZHECCKKRU.JRTCKXETXF.6YNURZBX9Y":{ "unit":"GB-Mo", "endRange":"1024", "description":"$0.0240 per GB",

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


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

我有点不清楚您要查找的是什么,但这将为您提供不带标记的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":{

      }
   }
}

希望这对您的用例更有效

好吧,我又开始做循环了,下面是我的想法

   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"
         }
      }
   ]
}

你只是想要
{“priceDimensions”:list(d[“priceDimensions”].values())}
?是的,@chriswell说!如何在Python中实现这一点?最好使用标准/通用导入。这在本例中非常有效,但我并不总是提前知道这个标记['m9d34x8zheckkru.JRTCKXETXF']。。。我怎样才能从该命令中完全删除它?
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"
         }
      }
   ]
}