获得Dict中最长的元素

时间:2012-02-14 17:54:57

标签: python dictionary

我将数据存储在字典中,其中key是一个整数,value是一个整数元组。 我需要得到最长元素的长度及其关键。

我发现这是为了获得超过dict的最大值:

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

有没有更优雅,更pythonic的方式呢?

3 个答案:

答案 0 :(得分:11)

这是我认为Python中lambda仍然存在的原因之一。

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的解决方案,在这种情况下实际上更有意义。 (我误解了你的问题。)

答案 1 :(得分:4)

如果您需要长度和钥匙:

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))

答案 2 :(得分:0)

您不需要存储所有元素的长度,只需存储密钥和当前最长元组的长度:

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