Python 将列表设置为dict中具有未知列表元素数的键

Python 将列表设置为dict中具有未知列表元素数的键,python,list,dictionary,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"] = {} 谢谢大家! 您可以使用一个循环来迭代atK

有没有办法根据列表设置嵌套键? 我有以下代码:

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

setDictKeys(dict, ["a", "b"], someKeysList)
我希望字典看起来像这样:

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

谢谢大家!

您可以使用一个循环来迭代
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': {}}}}

您可以使用一个循环来迭代
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': {}}}}

对于这个特殊的问题,这里还有一种方法

def fun(d,atkey,listofkeys):
    d[atkey[0]]={atkey[1]:{}}
    for i in listofkeys:
        d[atkey[0]][atkey[1]][i] = {}
    return d
print(fun({'1':'h999'},['a','b'],['hi','hello','abcd','a','b']))

对于这个特殊的问题,这里还有一种方法

def fun(d,atkey,listofkeys):
    d[atkey[0]]={atkey[1]:{}}
    for i in listofkeys:
        d[atkey[0]][atkey[1]][i] = {}
    return d
print(fun({'1':'h999'},['a','b'],['hi','hello','abcd','a','b']))

下面是一个使用
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: {}})})})

下面是一个使用
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: {}})})})

列表
不能设置为字典的键。您可以从
collections
包中检查
defaultdict
,并将默认类型定义为dict。对于嵌套大小写,您还需要再次设置新的defaultdict。
list
不能设置为字典的键。您可以从
collections
包中检查
defaultdict
,并将默认类型定义为dict。对于嵌套的大小写,您还需要再次设置新的defaultdict。“此特定问题”询问的是“未知数量的列表元素”。“此特定问题”询问的是“未知数量的列表元素”,虽然