我有一本字典,其中有键的元组,我需要将其转换为嵌套字典:
tuple_dict = {(a, b, c): {"f": 5, "d": 6, "e", 4}}
final_dict = {a: {b: {c: {"f": 5, "d": 6, "e", 4}}}}
我有以下代码,最多可实现 7 层嵌套,但我觉得有一个更优雅的解决方案,也许使用递归,最多可实现 n 层嵌套?
我有另一个函数,它正在创建一个空的“shell”字典以使其工作,如果我也可以删除它,那就太好了。
for key, value in tuple_dict.items():
if no_of_keys == 1:
final_dict[key[0]] = value
elif no_of_keys == 2:
final_dict[key[0]][key[1]] = value
elif no_of_keys == 3:
final_dict[key[0]][key[1]][key[2]] = value
elif no_of_keys == 4:
final_dict[key[0]][key[1]][key[2]][key[3]] = value
elif no_of_keys == 5:
final_dict[key[0]][key[1]][key[2]][key[3]][key[4]] = value
elif no_of_keys == 6:
final_dict[key[0]][key[1]][key[2]][key[3]][key[4]][key[5]] = value
elif no_of_keys == 7:
final_dict[key[0]][key[1]][key[2]][key[3]][key[4]][key[5]][key[6]] = value
else:
print("Cannot have more than 7 keys")
迭代键元组的元素,根据需要创建嵌套字典。
final_dict = {}
for key, value in tuple_dict.items():
temp_dict = final_dict
for k in key[:-1]:
if k not in temp_dict:
temp_dict[k] = {}
temp_dict = temp_dict[k]
temp_dict[key[-1]] = value
这是一个很好的reduce应用。
from functools import reduce
tuple_dict = {("a", "b", "c"): {"f": 5, "d": 6, "e": 4}}
for key, value in tuple_dict.items():
final_dict = reduce(lambda x, y: {y: x}, reversed(key), value)
print(final_dict)
# {'a': {'b': {'c': {'f': 5, 'd': 6, 'e': 4}}}}