2016-02-07 13 views
5

私はPythonで作業しています。 、排他的なキー値の最大の組み合わせでサブディクショナリは、最初の要素である辞書からランクリストを取得するにはどうすればよいですか?

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

:私が持っている辞書には、次のようになります。

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

そして、私はこのようにそれを注文する必要があります排他的キー値の2番目に大きい組み合わせは2番目の要素にあります。それぞれの辞書からキーの最大の組み合わせ(合計)を取得します(この場合はa-> 4: 'c'とb-> 6: 'd')。これらの値を削除します(この場合はa-> 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 
関連する問題