我正在研究一些元组的python dicts。每个元组包含 2 个整数。元组中的第一个数字称为值,第二个数字称为工作。我有 3 个不同的比较器,我需要按降序对字典进行排序。此顺序应由调用哪个比较器来确定。即 dict 可以以 3 种不同的方式排序。我已经尝试了尽可能多的不同方法来让它发挥作用。我可以在不使用比较器的情况下做到这一点,只需将其分解为一个列表并通过切片元组进行排序,但如果有人可以阐明使用比较器进行排序的语法,将不胜感激。我的 cmpWork 似乎正确返回,但其他 2 没有反转。
如果我能得到按元组值排序的字典,那也很棒。我得到了一个排序
sortedSubjects = sorted(tmpSubjects.iteritems(), key = operator.itemgetter(1), reverse = True)
但这不允许我对元组进行切片。
第一次发菜鸟,如有错误请见谅。
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))]
这几乎正是我正在寻找的,除了我不能按元组中的第二个值排序,也不能按 cmpRatio 排序。