2012-02-14 3 views
5

데이터를 사전에 저장합니다. 여기서 key는 정수이고 value는 정수의 튜플입니다. 가장 긴 요소의 길이와 키를 가져와야합니다. ,Dict에서 가장 긴 요소 가져 오기

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

내가 len 기능을 수정하기 위해 노력하고 키 사용으로, 그러나 그것은 작동하지 않았다, 그래서 나는 합리적이고 간단 뭔가를 시도 :

나는 DICT를 통해 최대 값을 얻기 위해 이것을 발견 아직 비효율적입니다.

더 우아하고 파이썬 적 방법이 있습니까?

답변

11

이것이 내가 생각하는 이유 중 하나입니다. lambda이 여전히 존재합니다.

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

특히 렌을 반환하려면 ...

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

또는 실제로이 경우에 더 의미 eumiro의 솔루션을 사용합니다. (나는 당신의 질문을 오해.)

+0

신경 쓰지 마세요. – jterrace

+0

빙고! 그게 내가 원하는거야 –

+0

당신은'def sorting_key (k) : return len (flows [k])'를 간단히 할 수 있고'lambda' 대신'sorting_key'를 사용하여 인수에 대해 확실하지 않다 "여전히 존재한다. Python에서 "그러나 확실히 작동하는 인수는"이것은 람다 표현식에 대해 많은 의미를 부여하는 사례입니다 " –

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과 value가 아닌 key와 value를 반환하려고한다고 생각한다. – senderle

+0

"길이가 가장 긴 요소와 키를 가져와야합니다." – eumiro

+0

아, 그래! – senderle

0

당신은 모든 요소의 길이를 저장할 필요가 없습니다, 당신은 단지 키와 curren의 길이를 저장해야합니다 가장 긴 튜플 :

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