[英]How to create a List containing a sub dictionary keys , from nested dictionary?
[英]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.