私はタプルのいくつかのpython辞書に取り組んでいます。2 つの int を含む各タプル。タプルの 1 桁目は値と呼ばれ、2 桁目は作業と呼ばれます。3 つの異なるコンパレータがあり、辞書を降順に並べ替える必要があります。この順序は、どのコンパレーターが呼び出されるかによって決定されます。つまり、dict は 3 つの異なる方法でソートできます。これを機能させるために、できる限り多くの方法を試しました。リストに分割し、タプルをスライスしてソートするだけで、コンパレータを使用せずに実行できますが、コンパレータを使用してソートする構文に光を当てることができれば、大歓迎です。私はcmpWorkに対して正しく返されているようですが、他の2つは元に戻されていません。
また、タプル値でソートされた辞書を取得できれば素晴らしいと思います。私はある種の仕事をしました
sortedSubjects = sorted(tmpSubjects.iteritems(), key = operator.itemgetter(1), reverse = True)
しかし、これではタプルをスライスできません。
初めてnoobに投稿するので、間違いがあればお詫びします。
def cmpValue(subInfo1, subInfo2):
return cmp(subInfo2[0] , subInfo1[0])
def cmpWork(subInfo1, subInfo2):
return cmp(subInfo1[1] , subInfo2[1])
def cmpRatio(subInfo1, subInfo2):
return cmp((float(subInfo2[0]) / subInfo2[1]) , (float(subInfo1[0]) / subInfo1[1]))
def greedyAdvisor(subjects, comparator):
tmpSubjects = subjects.copy()
sortedSubjects = sorted(tmpSubjects.values(), comparator, reverse = True)
print sortedSubjects
smallCatalog = {'6.00': (16, 8),'1.00': (7, 7),'6.01': (5, 3),'15.01': (9, 6)}
greedyAdvisor(smallCatalog, cmpRatio)
greedyAdvisor(smallCatalog, cmpValue)
greedyAdvisor(smallCatalog, cmpWork)
[(7, 7), (9, 6), (5, 3), (16, 8)]
[(5, 3), (7, 7), (9, 6), (16, 8)]
[(16, 8), (7, 7), (9, 6), (5, 3)]
ps
ライン
sortedSubjects = sorted(tmpSubjects.iteritems(), key = operator.itemgetter(1), reverse = True)
戻り値
[('6.00', (16, 8)), ('15.01', (9, 6)), ('1.00', (7, 7)), ('6.01', (5, 3))]
これは、タプルの2番目の値でソートできず、cmpRatioでもソートできないことを除いて、私が探しているものとほぼ同じです。