如何在python中搜索和访问子元素和结构
我用python编写了这个dict(json),并希望减少它如何在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",
{
"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"
}
}
]
}