2012-02-14 11 views
5

में सबसे लंबा तत्व प्राप्त करें मैं शब्दकोश में डेटा संग्रहीत करता हूं, जहां कुंजी एक पूर्णांक है, और मान पूर्णांक का एक ट्यूपल है। मुझे सबसे लंबे तत्व की लंबाई और इसकी कुंजी प्राप्त करने की आवश्यकता है।डिक्ट

मैं 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 

क्या ऐसा करने के लिए एक और सुरुचिपूर्ण और पाइथोनिक तरीका है?

उत्तर

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) कर सकते हैं: लौ लौटें (प्रवाह [के])' फिर 'lambda' के स्थान पर 'sorting_key' का उपयोग करें, इसलिए मुझे तर्क के बारे में निश्चित नहीं है" अभी भी मौजूद है पायथन में "लेकिन तर्क जो निश्चित रूप से काम करता है" यह एक ऐसा मामला है जो 'लैम्ब्डा' अभिव्यक्ति के लिए बहुत अधिक समझ में आता है " –

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

मुझे लगता है कि ओपी एक कुंजी और मूल्य वापस करना चाहता है, न कि लेन और मूल्य। – senderle

+0

"मुझे सबसे लंबा तत्व, और इसकी कुंजी की लंबाई प्राप्त करने की आवश्यकता है।" – eumiro

+0

आह, बिल्कुल सही! – senderle

0

आपको सभी तत्वों की लंबाई को स्टोर करने की आवश्यकता नहीं है, आपको केवल कुंजी और curren की लंबाई को स्टोर करने की आवश्यकता है tly longest tuple:

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  
संबंधित मुद्दे