優雅的語法考慮我的字典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
優雅的語法考慮我的字典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
一個想法可能是構建一個高階函數應用功能ñ。次這樣的:
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)
雖然我同意,如果您需要的功能只有一次,這仍然是醜陋。
贏家!!!!我用'reduce(d.get,[k] * n)' – piRSquared
我副手的解決辦法是簡單地創建一個功能,如:
def walk(dict, start, iters):
if iters <= 0:
return start
return walk(dict, dict[start], iters-1)
一旦錯誤處理添加,它看起來會不太乾淨,但我沒有看到一個偉大的方式,以穩健做到這一點而看起來更簡潔。
如果這是一個有序的字典,你可以走鍵值對沒有? – EdChum
你想完成什麼? – canyon289
你的功能在3條短線上完成工作不是嗎? –