gpt4 book ai didi

python - 如何在python中获取dict的深度项并丢弃其余的

转载 作者:行者123 更新时间:2023-12-02 02:07:26 26 4
gpt4 key购买 nike

我有一个来自某处的复杂 json 文件,我正在尝试获取 n 级字典并丢弃其余部分。 (所以这并不是扁平化的)。例如,给定一个国家及其子国家和城市的字典

my_dict = {
'USA':['California', 'Arizona', {'Ohio':'Columbus'}],
'Zimbabwe':{'Manicaland':['Mutare', 'Nyanga']},
'New Zealand':''
}

调用 1 级以获取国家/地区列表

n_level(my_dict, 1)

应该给

['USA', 'Zimbabwe', 'New Zealand']

#calling for level 2
n_level(my_dict, 2)

#should give

[
{'USA':['California', 'Arizona', 'Ohio']},
{'Zimbabwe':'Manicaland'}, #<--str
'New Zealand'
]

我已经尝试过这个,但不知道如何工作

my_dict = {
'USA':['California', 'Arizona', {'Ohio':'Columbus'}],
'Zimbabwe':{'Manicaland':['Mutare', 'Nyanga']}
}
def make_leaf_list(d):

r = []
if isinstance(d, collections.abc.Mapping):
for k, v in d.items():
r.append(k)
elif isinstance(d, list):
for i in d:
r.extend(make_leaf_list(i))
else:
return r.append(d)

return r

def n_level(o, depth):

if depth == 0:
return make_leaf_list(o)

if isinstance(o, collections.abc.Mapping):
r = {}
for k, v in o.items():
r[k] = n_level(v, depth-1)
return r
elif isinstance(o, list):
r = []
for i in o:
r.append(update(i, depth-1))
return r
else:
return o

#and calling it
n_level(my_dict, 3)

对这种方法有什么想法吗?谢谢

最佳答案

这是一个您可以开始的解决方案,它适用于级别 1 和 2,我不知道您有多少级别,因此,它使用了元素类型:list、dict 或 str,并根据类型知道它是否具有更多深度或者它是否是最后一个元素:

def n_level(my_dict, depth):
if depth == 1:
return list(my_dict.keys())
if depth == 2:
result={}
for i in list(my_dict.keys()):
# print(my_dict[i])
if type(my_dict[i])==dict:
# print(list(my_dict[i].keys())[0])
add_to_dict(result,list(my_dict[i].keys())[0],i)

elif type(my_dict[i])==list:
for leaf in my_dict[i]:
if type(leaf)==str:
# print(leaf)
add_to_dict(result,leaf,i)
elif type(leaf)==dict:
# print(list(leaf.keys())[0])
add_to_dict(result,list(leaf.keys())[0],i)
elif my_dict[i]=='':
add_to_dict(result,my_dict[i],i)
return result

当使用级别 2 进行测试时:

n_level(my_dict,2)

它给出了:

{'New Zealand': '',
'USA': ['California', 'Arizona', 'Ohio'],
'Zimbabwe': 'Manicaland'}

级别 1:

n_level(my_dict,1)
['USA', 'Zimbabwe', 'New Zealand']

关于python - 如何在python中获取dict的深度项并丢弃其余的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68223005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com