2012-02-14 64 views
5

我將數據存儲在字典中,其中key是一個整數,value是一個整數元組。 我需要獲取最長元素的長度及其關鍵字。獲取字典中最長的元素

我發現這超過字典獲取最大價值:

def GetMaxFlow(flows):   
    maks=max(flows, key=flows.get) 
    return flows[maks],maks 

我試圖修改並作爲重點使用len功能,但它沒有工作,所以我嘗試了一些合理的和直接的,但效率低下:

def GetMaxFlow(flows): 
    Lens={} 
    for a in flows.iteritems(): 
     Lens[a[0]]=len(a[1]) 
    maks=max(Lens, key=Lens.get) 
    return Lens[maks],maks 

有沒有更優雅,Python的方式做到這一點?

回答

11

這是lambda仍然存在於Python中的原因之一我想。

def GetMaxFlow(flows):   
    maks=max(flows, key=lambda k: len(flows[k])) 
    return flows[maks],maks 

要明確返回LEN ...

def GetMaxFlow(flows):   
    maks=max(flows, key=lambda k: len(flows[k])) 
    return len(flows[maks]), maks 

或者使用eumiro的解決方案,在這種情況下,實際上更有意義。 (我誤解你的問題。)

+0

沒關係,這看起來不錯。 – jterrace 2012-02-14 18:07:45

+0

賓果!這就是我想要的 – 2012-02-14 18:12:34

+0

你可以很容易地做'def sorting_key(k):return len(flows [k])'然後使用'sorting_key'來代替'lambda',所以我不確定參數「仍然存在在Python中「,但肯定有效的論點是」這是一個對lambda表達式很有意義的例子「 – 2016-06-27 17:50:43

3

如果你需要的長度和關鍵:

def GetMaxFlox(flows): 
    return max((len(v), k) for k,v in flows.iteritems()) 

如果你需要的價值和關鍵:

def GetMaxFlox(flows): 
    return max((len(v), v, k) for k, v in flows.iteritems())[1:] 

def GetMaxFlox(flows): 
    return max(((v, k) for k, v in flows.iteritems()), key=lambda (v,k): len(v)) 
+0

我認爲OP想要返回一個鍵和一個值,而不是一個len和一個值。 – senderle 2012-02-14 18:12:45

+0

「我需要得到最長元素的長度和密鑰。」 – eumiro 2012-02-14 18:13:54

+0

啊,很對! – senderle 2012-02-14 18:14:42

0

你不需要存儲所有元素的長度,你只需要存儲密鑰和curren的長度tly最長的元組:

def GetMaxFlow(flows): 
    maks_length=0 
    for key,value in flows.iteritems(): 
      if len(value)>=maks_length: 
        maks_key = key 
        maks_length = len(value) 
    return maks_length, maks_key