python - 根据第一列然后下一列排序

标签 python sorting python-2.7

我有一本字典需要排序。我想根据值对字典进行排序。下一步,如果两个键具有相同的值,我想根据键的字典值进行排序。

我试过了。

>>> 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/

相关文章:

python - 为什么 ListView 不显示模板中的数据?

java - Java 中的自定义比较器可以工作,但有一个缺陷

java - 如何按升序和降序对带分隔符的字符串列表进行排序

java - 按大小对 ArrayList 中的集合进行排序

python - 如果 Flask 应用程序中的对象是一个具有空值的数据框和一个由下划线分隔的数字的列,如何在应用程序路由之间传递对象?

python - 如何从文件中读取带有字符串键和元组值的字典?

windows - 在 python 2.7 ctypes 中构建 UCS4 字符串缓冲区

Python virtualenv -> venv/bin/python 中的新 python 可执行文件

python - 捕获正则表达式中的内容

Python itertools 产品,但有条件?