在Python中,我目前正在处理一个非常大的JSON文件,其中包含一些深层词典和数组。我遇到的问题不在于它。例如,在下面,它主要是国家,有地区/州,城市和郊区。问题是,如果只有一个郊区,它会返回一个字典,但如果不止一个,它是一个带有字典的数组,这使得我必须添加另一行代码才能更深入。当然,可以ifelse /为它,但这只是一个非常小的一部分,并且它一直不适合ifelse。
我想做的只是在比利时中搜索字典条目"code": "8400"
中的任何内容,并在JSON文件中返回它的位置。为了做这样的事情,我最好的方法是什么?谢谢!
***SNIP***
{
"code": "BE",
"name": "Belgium",
"regions": {
"region": [
{
"code": "45",
"name": "Flanders",
"places": {
"place": [
{
"code": "1790",
"name": "Affligem"
},
{
"code": "8570",
"name": "Anzegem"
},
{
"code": "8630",
"name": "Diksmuide"
},
{
"code": "9600",
"name": "Ronse"
}
]
},
"subregions": {
"subregion": [
{
"code": "46",
"name": "Coast",
"places": {
"place": [
{
"code": "8300",
"name": "Knokke-Heist"
},
{
"code": "8400",
"name": "Oostende",
"subplaces": {
"subplace": {
"code": "8450",
"name": "Bredene"
}
}
},
{
"code": "8420",
"name": "De Haan"
},
{
"code": "8430",
"name": "Middelkerke"
},
{
"code": "8434",
"name": "Westende-Bad"
},
{
"code": "8490",
"name": "Jabbeke"
},
{
"code": "8660",
"name": "De Panne"
},
{
"code": "8670",
"name": "Oostduinkerke"
}
]
}
},
{
"code": "47",
"name": "Cities",
"places": {
"place": [
{
"code": "1000",
"name": "Brussels"
},
{
"code": "2000",
"name": "Antwerp"
},
{
"code": "8000",
"name": "Bruges"
},
{
"code": "8340",
"name": "Damme"
},
{
"code": "9000",
"name": "Gent"
}
]
}
},
{
"code": "48",
"name": "Interior",
"places": {
"place": [
{
"code": "2260",
"name": "Westerlo"
},
{
"code": "2400",
"name": "Mol"
},
{
"code": "2590",
"name": "Berlaar"
},
{
"code": "8500",
"name": "Kortrijk",
"subplaces": {
"subplace": {
"code": "8940",
"name": "Wervik"
}
}
},
{
"code": "8610",
"name": "Handzame"
},
{
"code": "8755",
"name": "Ruiselede"
},
{
"code": "8900",
"name": "Ieper"
},
{
"code": "8970",
"name": "Poperinge"
}
]
}
},
修改
我被要求展示我目前是如何通过这个JSON文件的。 Root是一个字典,其中包含与我正在尝试搜索的城市/郊区相等的数字。它没有定义它是一个城市还是郊区。下面是我的懒惰编码搜索,当我试图学习如何挖掘这个JSON文件,直到我意识到它变得多么复杂并且有点卡住了。 的 SNIP
for k in dataDict['countries']['country']:
if k['code'] == root['country']:
for y in k['regions']['region']['places']['place']:
if y['code'] == root['place']:
city = y['name']
else:
try:
for p in y['subplaces']['subplace']:
if p['code'] == root['place']:
city = p['name']
except:
pass
答案 0 :(得分:0)
如果我理解的话,每个词典都有以下结构:
{"code": # some int
"name": # some str
none / "country" / "place" / whatever # some dict or list
您可以编写一个递归函数来处理一个且只能处理一个字典:
def foo(my_dict):
if my_dict['code'] == root['place']:
city = my_dict['name']
elif "country" in my_dict:
city = foo(my_dict['country'])
elif "place" in my_dict:
#
# and so on...
else:
city = None
return city
希望这个例子能帮到你。