设置:我想编写一个方法,该方法将使用嵌套的数据对象和路径字符串,并尝试使用路径组件来取消引用数据对象内部的位置。
例如,您将拥有/alpha/bravo/0/charlie
之类的路径,并且如果该路径是已定义的位置,则该方法将返回data_obj['alpha']['bravo'][0]['charlie']
或执行其他操作(引发异常,记录警告,返回None
(如果不是)。
尝试:我觉得可能有一种相当简单的方法来做,当我环顾四周时,发现this answer,这建议将functools.reduce
与{{ 1}}遍历任意深度的字典。我想对其进行调整以涵盖可能具有嵌套列表的字典,所以我玩了一段时间,发现嵌套的operator.getitem
调用可以正常工作,但是getitem
和getitem
的组合结果令人困惑的类型不匹配,如下所示。
问题:在下面显示的代码片段中,为什么reduce
调用会导致异常,而其他进行嵌套调用的方式却没有呢?
我没有根据的猜测:reduce
或functools
中的某个内容将operator
标识符设置为指向* {* 1 *}或getitem
,而当被要求与list.__getitem__
玩得很好时,它会卡在一个或另一个上,并且无法来回切换。
代码:
dict.__getitem__
答案 0 :(得分:3)
因此,应该
reduce(getitem, node_keys, data_obj)
reduce
的签名为def reduce(function, sequence, initial=None)
其中initial
是第三个参数。您的对象是初始的。