python中是否存在递归itemgetter
。让我们说你有一个像
d = {'a': (1,2,3), 'b': {1: (5,6)}}
我希望从d['a']
获取元组的第一个元素?据我所知,itemgetter
只会执行一个级别,即获取a
或b
或两者。
是否有一些聪明的方法将itertools
与itemgetter
结合起来以产生所需的结果。
基本上我想要能够调用的是
from operator import itemgetter
d = {'a': (1,2), 'b': (4, (5,))}
itemgetter({'a': 0})(d) --> 1
itemgetter({'b': 0})(d) --> 4
itemgetter({'b': {1: 0}})(d) --> 5
d = {'a': {'b': (1,2,3)}}
itemgetter({'a': {'b': 2}})(d) --> 3
答案 0 :(得分:3)
我不喜欢'聪明'的方式。明显更好。
您可以非常轻松地编写一个沿着下标列表迭代的getter:
def getter(x, *args):
p = x
for s in args:
p = p[s]
return p
>>> d = {'a': (1,2,3), 'b': {1: (5,6)}}
>>> getter( d, 'a', 0)
1