Python中字典根据多项规则排序
在SQL中或者用pandas可以轻松地对一列数据按照多个规则进行排序,那么有没有办法直接用python的sorted
实现呢?答案是肯定的。
key | value |
---|---|
b | 10 |
c | 10 |
a | 10 |
d | 20 |
>>> mydict = {'b':10, 'c':10, 'a':10, 'd':20}
- 1
字典根据key排序
>>> sorted(mydict.iteritems(), key=lambda x:x[0])
[('a', 10), ('b', 10), ('c', 10), ('d', 20)]
- 1
- 2
字典根据value排序
>>> sorted(mydict.iteritems(), key=lambda x:x[1])
[('a', 10), ('c', 10), ('b', 10), ('d', 20)]
- 1
- 2
字典先按key排序,然后按value排序
>>> sorted(mydict.iteritems(), key=lambda x:(x[0],x[1]))
[('a', 10), ('b', 10), ('c', 10), ('d', 20)]
- 1
- 2
字典先按value排序,然后按key排序
>>> sorted(mydict.iteritems(), key=lambda x:(x[1],x[0]))
[('a', 10), ('b', 10), ('c', 10), ('d', 20)]
- 1
- 2
字典先按value升序排序,然后按key降序排序
>>> sorted(mydict.iteritems(), key=lambda x:(x[1],-ord(x[0])))
[('c', 10), ('b', 10), ('a', 10), ('d', 20)]
- 1
- 2
字典先按value降序排序,然后按key升序排序
>>> sorted(mydict.iteritems(), key=lambda x:(x[1],-ord(x[0])), reverse=True)
[('d', 20), ('a', 10), ('b', 10), ('c', 10)]
- 1
- 2
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7b4cdcb592.css" rel="stylesheet">
</div>
</article>