说我有两个这样的对象:
d={'a':{'z':1,'y':2},'b':{'z':0,'y':4}}
k=('a','y')
Run Code Online (Sandbox Code Playgroud)
我如何使用这两个对象来获取:
>>> d['a']['y']
2
Run Code Online (Sandbox Code Playgroud)
我需要它是动态的,所以这不起作用:
d[k[0]][k[1]]
Run Code Online (Sandbox Code Playgroud)
因为我并不总是确定字典的嵌套深度.k可以有一个或多个元素.
try:
# python 3 maybe?
from functools import reduce
except ImportError:
# assume python 2...
pass
reduce(dict.__getitem__, k, d)
Run Code Online (Sandbox Code Playgroud)
请求解释的位:减少(FN,[A1,A2,A3 ...],B)转换成:FN(FN ...(FN(FN(B,A1),a2)中,a3)的.. ).因此,它将一些"累加器"值与序列中的连续值配对,将其传递给传入的函数,然后使用它来更新"累加器"值.
所以我们的"累加器"值是顶级字典,我们将它作为第一个("self")参数传递给字典方法__getitem__,它实现了下标操作符.
如下面的注释中所述,您可以使用operator.getitem它dict.__getitem__来推广支持索引的其他数据类型,例如列表,元组,字符串......
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |