我不知道为什么我的代码不起作用,我有一个元组列表(或字典,我都尝试了),我想按元组的第二个值对它进行排序,以防万一2元组的第一个值与第二个值相同。我尝试过:
sorted(my_list, key=lambda k: (k[1], k[0]), reverse=True)
但是我得到的是一个仅按第二个值排序的列表...例如,该列表:
l = [('ee',10), ('oo',11), ('aa', 10)]
我得到以下输出:[('oo', 11), ('ee', 10), ('aa', 10)]
但按字典顺序,“ aa”位于“ ee”之前...
我在做什么错?我尝试使用my_list.sort()或dict,但一无所获。
问题可能是“反向真实”条件,但是我试图得到的是以下输出:[('oo', 11), ('aa', 10), ('ee', 10)]
基本上,我希望反真仅适用于lambda的第一个条件...有可能吗?
答案 0 :(得分:2)
您可以执行以下操作:
output = sorted(l, key=lambda x: (x[1], [-ord(letter) for letter in x[0]]), reverse=True)
output
将包含以下内容:
[('oo', 11), ('aa', 10), ('ee', 10)]
我们保持相反的顺序(降序),但是我们将列表作为第二个选项(也由Python按字典顺序进行比较)传递给排序,每个字母的ASCII值为负。这样,-ord('a')
(-97)大于-ord('e')
(-101)
答案 1 :(得分:0)
我想您应该删除reverse=True
选项,以便按“正确”顺序对值进行排序。
>>> l = [('ee',10), ('oo',11), ('aa', 10)]
>>> sorted(l, key=lambda k: (k[1], k[0]), reverse=False)
[('aa', 10), ('ee', 10), ('oo', 11)]