2017-05-09 61 views
0

優雅的語法考慮我的字典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

如果這是一個有序的字典,你可以走鍵值對沒有? – EdChum

+4

你想完成什麼? – canyon289

+0

你的功能在3條短線上完成工作不是嗎? –

回答

3

一個想法可能是構建一個高階函數應用功能ñ。次這樣的:

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

贏家!!!!我用'reduce(d.get,[k] * n)' – piRSquared

2

我副手的解決辦法是簡單地創建一個功能,如:

def walk(dict, start, iters): 
    if iters <= 0: 
     return start 
    return walk(dict, dict[start], iters-1) 

一旦錯誤處理添加,它看起來會不太乾淨,但我沒有看到一個偉大的方式,以穩健做到這一點而看起來更簡潔。