python - 使用自定义比较器按任一元组值对元组字典进行排序

标签 python sorting tuples

我正在处理一些元组的 python 字典。每个元组包含 2 个整数。元组中的第一个数字被称为值,第二个数字被称为工作。我有 3 个不同的比较器,我需要将字典按降序排序。此顺序应由调用哪个比较器来确定。也就是说,可以用 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)]  

附上
线路

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 排序。

最佳答案

but this doesn't let me slice the tuples

从你的例子开始:

sortedSubjects = sorted(tmpSubjects.iteritems(),
                        key=operator.itemgetter(1),
                        cmp=comparator,   # What about specifying the comparison?
                        reverse=True)

关于python - 使用自定义比较器按任一元组值对元组字典进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927596/

相关文章:

python - pandas 中的多个引号

c++ - 在元组中搜索函数的参数

python - 根据日期条件删除行

python - 是否可以更新/添加到已经填充的 numpy 直方图(特别是 numpy.histogram2d)?

python - 保持可变元素的排序列表是最新的

java - 根据 Java 中的索引名称对 Set<String> 进行排序

ruby - 参数错误 : comparison of Hash with Hash failed - Sorting an array of hashes by hash name

c++ - 首先按字母顺序然后按数字对数字列表进行排序

python - 根据另一个自制顺序对列表中的元组进行排序

c++ - GCC 中的元组模板