获得Dict中最长的元素

Int*_*ure 5 python dictionary

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

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

def GetMaxFlow(flows):        
    maks=max(flows, key=flows.get)
    return flows[maks],maks
Run Code Online (Sandbox Code Playgroud)

我试图修改并作为一个关键用途使用该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
Run Code Online (Sandbox Code Playgroud)

有更优雅,更pythonic的方式吗?

sen*_*rle 11

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

def GetMaxFlow(flows):        
    maks=max(flows, key=lambda k: len(flows[k]))
    return flows[maks],maks
Run Code Online (Sandbox Code Playgroud)

要专门返回len ...

def GetMaxFlow(flows):        
    maks=max(flows, key=lambda k: len(flows[k]))
    return len(flows[maks]), maks
Run Code Online (Sandbox Code Playgroud)

或者使用eumiro的解决方案,在这种情况下实际上更有意义.(我误解了你的问题.)


eum*_*iro 5

如果您需要长度和密钥:

def GetMaxFlox(flows):
    return max((len(v), k) for k,v in flows.iteritems())
Run Code Online (Sandbox Code Playgroud)

如果您需要值和密钥:

def GetMaxFlox(flows):
    return max((len(v), v, k) for k, v in flows.iteritems())[1:]
Run Code Online (Sandbox Code Playgroud)

要么

def GetMaxFlox(flows):
    return max(((v, k) for k, v in flows.iteritems()), key=lambda (v,k): len(v))
Run Code Online (Sandbox Code Playgroud)