考虑我的字典d
:
d = {1: 2, 2: 3, 3: 1}
这只是字典形式的排列。
如何以语法优雅的方式重新应用此词典?
x = 1
# Not Elegant
d[d[d[x]]]
1
我想创建一个像:
这样的函数def f(d, k, n):
for _ in range(n):
k = d[k]
return k
答案 0 :(得分:3)
一个想法可能是构建一个高阶函数来应用函数 n 。时间如下:
def func_mul(f,n=2):
def g(x):
for _ in range(n):
x = f(x)
return x
return g
另一个选择是使用某种reduce
,如:
from functools import reduce
def func_mul(f,n=2):
return lambda x : reduce(lambda xi, _ : f(xi),range(n),x)
然后我们可以写:
d3 = func_mul(d.get,3)
d3(x)
虽然我同意如果你只需要这个功能一次,那么它仍然是丑陋的。
答案 1 :(得分:2)
我的随意解决方案是简单地创建一个函数,如:
def walk(dict, start, iters):
if iters <= 0:
return start
return walk(dict, dict[start], iters-1)
一旦添加了错误处理,它看起来就会变得更加干净,但是我看不到一个很好的方法来做到这一点,而且看起来更简洁。