Python 用于多次应用字典的优雅语法
想想我的字典Python 用于多次应用字典的优雅语法,python,Python,想想我的字典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 一个想法可能是构造一个高阶函数来应用函数n。像这样的时代: def func_mul(f,n=2): def g(x):
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
一个想法可能是构造一个高阶函数来应用函数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)
虽然我同意如果你只需要一次函数,这仍然很难看。一个想法可能是构造一个高阶函数来应用函数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)
尽管我同意如果只需要一次函数,这仍然很难看。我的简单解决方案是创建一个函数,如:
def walk(dict, start, iters):
if iters <= 0:
return start
return walk(dict, dict[start], iters-1)
def步行(dict、start、iters):
如果iters我的即时解决方案是简单地创建一个函数,如:
def walk(dict, start, iters):
if iters <= 0:
return start
return walk(dict, dict[start], iters-1)
def步行(dict、start、iters):
如果iters如果这是一个有序的dict,你只需遍历键值对就可以了否?你想完成什么?你的函数用3行短的代码完成了任务,不是吗?@Chris_Rands是的,它完成了。。。。但我坐在这里想知道是否有一种聪明的方法可以使用
reduce
/map
类型的东西。。。我想不出一个,所以我想我会问。如果这是一个有序的dict,你只需要遍历键值对就可以了。不?你想完成什么?你的函数在3行短的行中完成任务,不是吗?@Chris_Rands是的,它完成了。。。。但我坐在这里想知道是否有一种聪明的方法可以使用reduce
/map
类型的东西。。。我想不出一个,所以我想问问。