获取嵌套字典的所有可能组合
我想要获取一个多选答案表单的所有可能组合。
我有这个字典:
{
"question": "Gender?",
"choices": ["Male", "Female", "Non Bynary", "Other"],
"child":{
"question": "Country?",
"choices": ["USA", "Canada", "France", "Other"],
"children":{
"question": "Age?",
"choices": ["<20", "20-30", "30-40", "40+"],
}
}
}
我想得到的是:
[
{
"choice": "Male",
"child":{
"choice": "USA",
"child":{
"choice": "<20"
}
}
},
{
"choice": "Male",
"child":{
"choice": "USA",
"child":{
"choice": "20-30"
}
}
},
{
"choice": "Male",
"child":{
"choice": "USA",
"child":{
"choice": "30-40"
}
}
},
]
等等,我试过用itertools和简单的递归循环,但都没有成功,你能帮我吗?
我尝试过这样做:
list_children = {key + str(j): dict(zip(val.keys(), k))
for key, val in hierarchical_questions.items()
for j, k in enumerate(product(*val.values()))}
但是它给我的结果是:
'str' object has no attribute 'values'
我试过这个,但在递归语句上卡住了。
def test_list_choices(hierarchical_questions, parent_choice=None):
if parent_choice is None:
parent_choice = {}
list_children = []
for choice in hierarchical_questions['choices']:
if parent_choice is None:
parent_choice = choice
list_children.append({
"choice": choice.choice,
})
elif parent_choice == choice:
for child in hierarchical_questions['child']:
for child_choise in child["child"]:
#list_children.append()
print(child_choise)
return list_children
还有很多其他的递归函数,但它们却无限循环。
1 个回答
0
如果你不太在意效率的话,可以用一个简单的递归函数来实现:
def generate_combinations(question_dict, combination=None):
if combination is None:
combination = []
if "choices" not in question_dict:
return [combination]
combinations = []
for choice in question_dict["choices"]:
current_combination = combination + [{"choice": choice}]
if "child" in question_dict:
child_combinations = generate_combinations(question_dict["child"], current_combination)
combinations.extend(child_combinations)
elif "children" in question_dict: # Added for children key
child_combinations = generate_combinations(question_dict["children"], current_combination)
combinations.extend(child_combinations)
else:
combinations.append(current_combination)
return combinations