我有 list :
k = ["key1", "subkey2", "subsubkey3"]
我确定 d 是一个字典,因此 d["key1"]["subkey2"]["subsubkey3"] 是有效的。
如何将列表 k 转换为字典 d 的键,以便返回 d[k[0]][k[1]]。 ..?
请您参考如下方法:
您可以尝试使用 reduce()与 operator.getitem :
>>> from operator import getitem
>>>
>>> d = {'key1': {'subkey2': {'subsubkey3': 'value'}}}
>>> k = ["key1", "subkey2", "subsubkey3"]
>>>
>>> reduce(getitem, k, d)
'value'
在 Python 3.x 中,你应该使用 functools.reduce() .
reduce() 只是接受一个 2 参数函数并将其连续应用于列表的元素,累积结果。还有一个可选的 initializer 参数,我们在这里使用了它。正如文档所述,reduce() 大致等同于:
def reduce(function, iterable, initializer=None):
it = iter(iterable)
if initializer is None:
try:
initializer = next(it)
except StopIteration:
raise TypeError('reduce() of empty sequence with no initial value')
accum_value = initializer
for x in it:
accum_value = function(accum_value, x)
return accum_value
在我们的例子中,我们传递了一个initializer,所以它不会是None。因此我们拥有的是:
def reduce(function, iterable, initializer=None):
it = iter(iterable)
accum_value = initializer
for x in it:
accum_value = function(accum_value, x)
return accum_value
在这种情况下,我们的函数是getitem(a, b)(见上面的链接),它只返回a[b]。此外,我们的 iterable 是 k 而我们的 initializer 是 d。所以上面的 reduce() 调用等同于:
accum_value = d
for x in k:
accum_value = accum_value[x]
