gpt4 book ai didi

python - 在python中递归生成列表的子集

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:39 24 4
gpt4 key购买 nike

我有一个类似于以下内容的 json 文件:

[
{
"category1":"0120391123123"
},
[
{
"subcategory":"0120391123123"
},
[
{
"subsubcategory":"019301948109"
},
[
{
"subsubsubcategory":"013904123908"
},
[
{
"subsubsubsubcategory":"019341823908"
}
]
]
]
],
[
{
"subcategory2":"0934810923801"
},
[
{
"subsubcategory2":"09341829308123"
}
]
],
[
{
"category2":"1309183912309"
},
[
{
"subcategory":"10293182094"
}
]
]
]

我还有一个类别列表,我想在原始列表中找到这些类别。如果该类别存在于 categoriesToFind 中,我还想找到所有子类别并返回它们。

categoriesToFind = ['019301948109', '1309183912309']

finalCategories = []

def findCategories(currentList, isFirstIteration):
for x in currentList:
if type(x) is dict and (next(iter(x.values())) in categoriesToFind or not isFirstIteration):
finalCategories.append(next(iter(x.values())))
if len(currentList) < currentList.index(x) + 1:
findCategories(currentList[currentList.index(x) + 1], False)

findCategories(data, True)

我希望 finalCategories 包含以下内容:

['019301948109', '013904123908', '019341823908', '1309183912309', '10293182094']

最佳答案

您可以将递归与生成器一起使用:

categoriesToFind = ['019301948109', '1309183912309']
d = [{'category1': '0120391123123'}, [{'subcategory': '0120391123123'}, [{'subsubcategory': '019301948109'}, [{'subsubsubcategory': '013904123908'}, [{'subsubsubsubcategory': '019341823908'}]]]], [{'subcategory2': '0934810923801'}, [{'subsubcategory2': '09341829308123'}]], [{'category2': '1309183912309'}, [{'subcategory': '10293182094'}]]]
def get_subcategories(_d, _flag):
flag = None
for i in _d:
if isinstance(i, dict):
_val = list(i.values())[0]
if _val in categoriesToFind or _flag:
yield _val
flag = True
else:
yield from get_subcategories(i, _flag or flag)

print(list(get_subcategories(d, False)))

输出:

['019301948109', '013904123908', '019341823908', '1309183912309', '10293182094']

关于python - 在python中递归生成列表的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53385959/

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