将以元组为键的平面字典转换为嵌套字典

问题描述 投票:0回答:2

我有一本字典,其中有键的元组,我需要将其转换为嵌套字典:

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")
python dictionary recursion
2个回答
0
投票

迭代键元组的元素,根据需要创建嵌套字典。

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

0
投票

这是一个很好的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}}}}
© www.soinside.com 2019 - 2024. All rights reserved.