有什么方法可以基于列表设置嵌套键吗? 我有以下代码:
def setDictKeys (dict, atKey, keysList):
for key in keysList:
dict[atKey][key] = {}
然后致电
setDictKeys(dict, ["a", "b"], someKeysList)
我希望字典看起来像这样:
dict["a"]["b"]["key from someKeysList"] = {}
谢谢!
答案 0 :(得分:4)
您可以仅使用循环来迭代atKey
中的各个键,然后将“更深层”深入嵌套的dict。
def setDictKeys (d, atKey, keysList):
for key in atKey:
d = d.setdefault(key, {})
for key in keysList:
d[key] = {}
d = {}
setDictKeys(d, ["a", "b"], ["some", "Keys", "List"])
# {'a': {'b': {'some': {}, 'Keys': {}, 'List': {}}}}
答案 1 :(得分:1)
这里是解决特定问题的另一种方式
if (child is GroupBox)
{
if ((child as GroupBox).Content is StackPanel)
{
StackPanel d = (StackPanel)((GroupBox)child).Content;
}
}
答案 2 :(得分:1)
以下是使用collections.defaultdict
的功能解决方案。根据您的用例,您可能不需要手动实例化子字典。您可以只使用嵌套的defaultdict
。
from collections import defaultdict
from operator import getitem
from functools import reduce
tree = lambda: defaultdict(tree)
d = tree()
def setDictKeys(dataDict, atKey, keysList):
reduce(getitem, atKey, dataDict).update({i: {} for i in keysList})
setDictKeys(d, ['a', 'b'], [1, 2, 3])
print(d)
defaultdict({'a': defaultdict({'b': defaultdict({1: {}, 2: {}, 3: {}})})})