2016-02-07 12 views
5

मैं पायथन में काम कर रहा हूं। शब्दकोश मैं इस तरह दिखता है:मुझे एक शब्दकोश से रैंकिंग सूची कैसे मिल सकती है?

score = {'a':{4:'c', 3:'d'}, 'b':{6:'c', 3:'d'}} 

और मैं इस तरह यह ऑर्डर करने के लिए की जरूरत है:

rank = [{a:3, b:6}, {a:4, b:3}] 

कहाँ अनन्य कुंजी मान का सबसे बड़ा संयोजन के साथ उप शब्दकोश पहला तत्व में है, विशेष कुंजी मानों का दूसरा सबसे बड़ा संयोजन दूसरे तत्व में और आगे है। सबसे बड़ा संयोजन तर्क होगा: 1. प्रत्येक शब्दकोश से कुंजी का सबसे बड़ा संयोजन (कुल योग) प्राप्त करें (इस मामले में यह एक-> 4: 'c' और b-> 6: 'd' होगा। उन मानों को हटाएं शब्दकोश से और कुंजी के अगले सबसे बड़े संयोजन को पकड़ें (इस मामले में, यह एक-> 4: 'c' और b-> 3: 'd' होगा)। यह तब तक जारी रखना चाहिए जब तक मूल शब्दकोश खाली न हो।

यह अनन्य क्योंकि एक बार एक बार एक मूल्य के मूल dict से इस्तेमाल किया गया है, इसे हटा दिया जाना चाहिए, या बाहर रखा भविष्य के किसी भी संयोजन में फिर से इस्तेमाल किया जा रहा से है।

मैं सभी विभिन्न दृष्टिकोणों मुझे पता है की कोशिश की है, लेकिन एल्गोरिदमिक रूप से मुझे कुछ याद आ रही है।

+3

कृपया 'सबसे बड़ा संयोजन' – Pynchia

+0

के अर्थ पर विस्तृत करें क्या यह और स्पष्ट है? – DanGoodrick

उत्तर

1

I लगता है मैंने जो बनाया है वह मैंने बनाया है? यह एक अजीब एल्गोरिदम है, और यह try/except ब्लॉक के कारण थोड़ी गंदा है, लेकिन यह काम करता है।

संपादित करें: टिप्पणियां जोड़ा गया और अनइडेड कोड हटा दिया गया।

def rank(toSort): 
    #importing from the string library 
    from string import lowercase as alph 

    #temporary list 
    _ranks=[] 

    #populate with empty dictonaries 
    for i in range(len(toSort)): 
     _ranks.append({}) 

    #the actual sorting algorithm 
    for i in range(len(toSort)-1): 
     #iterate all k/v pairs in the supplied dictionary 
     for k,v in toSort.iteritems(): 
      #iterate all k/v pairs in v element 
      for a,b in v.iteritems(): 
       #if the alpha index of an element is equal to 
       #the max alpha index of elements in its containing dictionary... 
       if alph.index(b)==max(map(alph.index,v.values())): 
        _ranks[i][k]=a 
       #if it isn't.. 
       else: 
        try: 
         _ranks[i+1][k]=a 
        except IndexError: 
         _ranks[-1][k]=a 
    return _ranks 
संबंधित मुद्दे

 संबंधित मुद्दे