2012-02-14 63 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