簡體   English   中英

從鍵列表創建嵌套字典

[英]create nested dictionary from keys list

我有鍵列表: list1 =['info', 'websites', 'site']和一個最終值 = 'check'。 我正在嘗試構建一個遞歸函數來創建一個嵌套字典,如下所示:

dict = {'info': {'websites': {'site' : 'check' } } }

我嘗試了以下函數,但我的函數沒有得到上述輸出:

def nested_dict(keys_list, value, check_dict, size):
    if size != 1:
        print(check_dict)
        check_dict[keys_list[0]] = nested_dict(keys_list[1:], value, check_dict, size-1)
    else:
        print(check_dict)
        check_dict[keys_list[0]] = value
        return check_dict 

我感謝您的幫助!

不需要遞歸。 這將起作用:

list1 = ['info', 'websites', 'site']

def nested_dict(keys_list, value):
    for key in reversed(keys_list):
        value = {key: value}
    return value

print(nested_dict(list1, 'check'))

給出:

{'info': {'websites': {'site': 'check'}}}

如果您使用遞歸,則存在超過長列表的最大遞歸深度的危險,而且優勢很小。

我不知道你為什么在你的nested_dict函數中使用這么多參數。 你在那里不需要它們。 這個簡單的例子給了我你正在尋找的結果:

def nested_dict(keys):
    if(len(keys) == 1):
        return {keys[0]: 'check'}
    else:
        return {keys[0]: nested_dict(keys[1:])}

key_list = ['info', 'websites', 'site']

print(nested_dict(key_list))

另外,是的,正如上面發布的那樣,您不需要遞歸來做到這一點。 但是對於我的回答,我假設您無論如何都需要項目的另一部分的遞歸。

您可以像這樣使用遞歸函數:

>>> list1 =['info', 'websites', 'site']

def nested_dict(l, value):
    if not l:
        return value
    else:
        return {l[0]: nested_dict(l[1:])}

>>> nested_dict(list1, 'check')
{'info': {'websites': {'site': 'check'}}}

使用functools.reduce的函數式方法:

from functools import reduce

lst = ['info', 'websites', 'site']

result = reduce(lambda x, y: {y: x}, reversed(lst), "check")
print(result)

輸出

{'info': {'websites': {'site': 'check'}}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM