从具有可变维度数的多维字典中获取值
我有一个多维字典。维度的列表是通过一个变量给出的。我该如何使用这个列表中的所有维度,去访问存储在最后的值呢?
def get_value(dict, dimensions):
"""
dict is the multidimensional dict
dimensions is a list of strings which specify all the dimensions
"""
我该如何用更符合Python风格的方式来写下面的命令呢?
dict[dimensions[0]][dimensions[1]][dimensions[2]]......[dimensions[len(dimensions)-1]]
1 个回答
2
其实并不太难,假设你用稍微不同的方式写了这个:
dict = dict[dimensions[0]]
dict = dict[dimensions[1]]
dict = dict[dimensions[2]]
......
dict = dict[dimensions[len(dimensions)-1]]
我们可以看到一个规律。还有一点要注意的是,我们只是遍历不同的维度,我们可以这样做:
for d in dimensions:
dict = dict[d]
所以,实际上我们可以这样做:
def get_value(mapping, keys):
for key in keys:
mapping = mapping[key]
return mapping
有趣的是,Python 提供了一个简便的方法来处理这个规律,就是对一个初始元素反复应用一个操作,每个操作对应另一个序列中的一个元素,这个方法叫做 reduce()
def get_value(mapping, keys):
return reduce(dict.get, keys, mapping)