我有一本字典需要排序。我想根据值对字典进行排序。下一步,如果两个键具有相同的值,我想根据键的字典值进行排序。
我试过了。
>>> l
{'a': 5, 'aa': 5, 'c': 1, 'b': 7}
>>> sorted(l)
['a', 'aa', 'b', 'c']
>>> sorted(l.items())
[('a', 5), ('aa', 5), ('b', 7), ('c', 1)]
>>> sorted(l.items(), reverse=True)
[('c', 1), ('b', 7), ('aa', 5), ('a', 5)]
>>> sorted(l.items(), key=l.get, reverse=True)
[('a', 5), ('aa', 5), ('c', 1), ('b', 7)]
>>> l
{'a': 5, 'aa': 5, 'c': 1, 'b': 7}
>>> 5>7
False
>>> sorted(l.items(), key=l.get, reverse=True)
[('a', 5), ('aa', 5), ('c', 1), ('b', 7)]
>>> sorted(l, key=l.get, reverse=True)
['b', 'a', 'aa', 'c']
>>> s=sorted(l, key=l.get, reverse=True)
>>> s
['b', 'a', 'aa', 'c']
>>> s.sort()
>>> s
['a', 'aa', 'b', 'c']
最佳答案
如果我正确理解了您的问题,那么您正在搜索类似的内容:
d = {'a': 5, 'aa': 5, 'c': 1, 'b': 7}
result = sorted(d.items(), key=lambda x: (x[1], x[0]))
print(result)
输出:
[('c', 1), ('a', 5), ('aa', 5), ('b', 7)]
如果你希望值是升序的,而第二个排序是降序的,你可以这样做:
d = {'a': 5, 'aa': 5, 'c': 1, 'b': 7}
result = sorted(d.items(), reverse=True, key=lambda x: (-x[1], x[0]))
print(result)
输出:
[('c', 1), ('aa', 5), ('a', 5), ('b', 7)]
有关排序的更多信息,请参阅 Sorting Howtos.
如果你有一个只包含字符串的元组列表,你可以这样做:
l = [('foo', 'bar'), ('foo', 'spam'), ('baz', 'egg')]
result = sorted(l, key=lambda x: (x[0], [-ord(c) for c in x[1]]))
print(result)
输出:
[('baz', 'egg'), ('foo', 'spam'), ('foo', 'bar')]
关于python - 根据第一列然后下一列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17395671/