在列表元素数量未知的情况下将列表设置为字典中的键

时间:2018-07-25 08:20:37

标签: python list dictionary

有什么方法可以基于列表设置嵌套键吗? 我有以下代码:

def setDictKeys (dict, atKey, keysList):
    for key in keysList:
        dict[atKey][key] = {}

然后致电

setDictKeys(dict, ["a", "b"], someKeysList)

我希望字典看起来像这样:

dict["a"]["b"]["key from someKeysList"] = {}

谢谢!

3 个答案:

答案 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: {}})})})