sorted python dict_Python sorted对list和dict排序

sorted语法

sorted(iterable, key=None, reverse=False)

参数说明:

- iterable -- 可迭代对象。

- key --主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回:

- 一个新list对象

sorted对字典dict排序

①按键key排序

from operator import itemgetter

dict = {3: 'B', 1: 'A', 2: 'C'}

# 按key升序 .items()取得3个(key,value)

# lambda x: x[0]取(key,value)的key 即(3,1,2)

d1 = sorted(dict.items(), key=lambda x: x[0], reverse=False) #

# 按key降序 itemgetter类似lambda

d2 = sorted(dict.items(), key=itemgetter(0), reverse=True) #

# 输出

print(d1, type(d1)) # [(1, 'A'), (2, 'C'), (3, 'B')]

print(d2, type(d2)) # [(3, 'B'), (2, 'C'), (1, 'A')]

[(1, ‘A'), (2, ‘C'), (3, ‘B')] [(3, ‘B'), (2, ‘C'), (1, ‘A')]

②按值value排序

from operator import itemgetter

dict = {3: 'B', 1: 'A', 2: 'C'}

# 按value升序 .items()取得3个(key,value)

# lambda x: x[1]取(key,value)的value 即('B','A','C')

d3 = sorted(dict.items(), key=lambda x: x[1], reverse=False) #

# 按value降序 itemgetter类似lambda

d4 = sorted(dict.items(), key=itemgetter(1), reverse=True) #

print(d3, type(d3)) # [(1, 'A'), (3, 'B'), (2, 'C')]

print(d4, type(d4)) # [(2, 'C'), (3, 'B'), (1, 'A')]

[(1, ‘A'), (3, ‘B'), (2, ‘C')] [(2, ‘C'), (3, ‘B'), (1, ‘A')]

sorted排序list

①按一种规则排序list

from operator import itemgetter

data = [('c', 3, 'Apple'), ('d', 1, 'Cat'), ('a', 2, 'Banana')]

# 根据字母升序

print(sorted(data, key=lambda x: x[0], reverse=False)) #

# 根据数字升序

print(sorted(data, key=lambda x: x[1], reverse=False)) #

# 根据单词升序

print(sorted(data, key=lambda x: x[2], reverse=False)) #

[('a', 2, 'Banana'), ('c', 3, 'Apple'), ('d', 1, 'Cat')]

[('d', 1, 'Cat'), ('a', 2, 'Banana'), ('c', 3, 'Apple')]

[('c', 3, 'Apple'), ('a', 2, 'Banana'), ('d', 1, 'Cat')]

②按多种规则排序list

# 先按照成绩降序排序,相同成绩的按照名字升序排序:

d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]

l = sorted(d1, key=lambda x:(-x['score'], x['name']))

print(l)

[{'name': 'alice', 'score': 38}, {'name': 'christ', 'score': 28}, {'name': 'darl', 'score': 28}, {'name': 'bob', 'score': 18}]

sorted排序list和dict的混合

先看看我们排序的有哪些类型的数据结构

#### 二维list排序

l1 = [['Bob', 95.00, 'A'], ['Alan', 86.0, 'C'], ['Mandy', 82.5, 'A'], ['Rob', 86, 'E']]

#### list中混合字典

l2 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]

#### 字典中混合list

d1 = {'Li': ['M', 7], 'Zhang': ['E', 2], 'Wang': ['P', 3], 'Du': ['C', 2], 'Ma': ['C', 9], 'Zhe': ['H', 7]}

#### 对字典中的多维list进行排序

d2 = {

'Apple': [['44', 88], ['11', 33], ['22', 88]],

'Banana': [['55', 43], ['11', 68], ['44', 22]],

'Orange':[['22', 22], ['55', 41], ['44', 42], ['33', 22]]

}

二维list排序

from operator import itemgetter

l1 = [['Bob', 95.00, 'A'], ['Alan', 86.0, 'C'], ['Mandy', 82.5, 'A'], ['Rob', 86, 'E']]

# 按先按成绩号升序,再按成绩数值升序

print(sorted(l1, key=itemgetter(2, 1), reverse=False))

# 按先按成绩号升序,再按成绩数值降序序

print(sorted(l1, key=lambda x:(x[2], -x[1]), reverse=False))

[[‘Mandy', 82.5, ‘A'], [‘Bob', 95.0, ‘A'], [‘Alan', 86.0, ‘C'], [‘Rob', 86, ‘E']]

[[‘Bob', 95.0, ‘A'], [‘Mandy', 82.5, ‘A'], [‘Alan', 86.0, ‘C'], [‘Rob', 86, ‘E']]

2. list中混合字典

from operator import itemgetter

# 先按照成绩降序排序,相同成绩的按照名字升序排序:

l2 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]

print(sorted(l2, key=lambda x:(-x['score'], x['name'])))

print(sorted(l2, key=itemgetter('score', 'name')))

[{‘name': ‘alice', ‘score': 38}, {‘name': ‘christ', ‘score': 28}, {‘name': ‘darl', ‘score': 28}, {‘name': ‘bob', ‘score': 18}]

[{‘name': ‘bob', ‘score': 18}, {‘name': ‘christ', ‘score': 28}, {‘name': ‘darl', ‘score': 28}, {‘name': ‘alice', ‘score': 38}]

3. 字典中混合list

d1 = {'Li': ['M', 7], 'Zhang': ['E', 2], 'Wang': ['P', 3], 'Du': ['C', 2], 'Ma': ['C', 9], 'Zhe': ['H', 7]}

# sort返回的是list,如果需要转为dict,再sorted前面套一个dict()就可以了

print(sorted(d1.items(), key=lambda x:(x[1][1], -ord(x[1][0]) ))) # 对字符比较需要ord。如果是'123'字符串数字可以使用int。

# print(sorted(d1.items(), key=lambda x:(x[1][1], -ord(x[1][0]) )))

[(‘Zhang', [‘E', 2]), (‘Du', [‘C', 2]), (‘Wang', [‘P', 3]), (‘Li', [‘M', 7]), (‘Zhe', [‘H', 7]), (‘Ma', [‘C', 9])]

4. 对字典中的多维list进行排序

d2 = {

'Apple': [['44', 88], ['11', 33], ['22', 88]],

'Banana': [['55', 43], ['11', 68], ['44', 22]],

'Orange':[['22', 22], ['55', 41], ['44', 42], ['33', 22]]

}

for key, value in d2.items():

d2[key] = sorted(value, key=lambda x:(x[1], -int(x[0]))) # 按list第二列升序,相同则按第一列降序,参考二维list排序

print(d2)

{‘Apple': [[‘11', 33], [‘44', 88], [‘22', 88]], ‘Banana': [[‘44', 22], [‘55', 43], [‘11', 68]], ‘Orange': [[‘33', 22], [‘22', 22], [‘52', 41], [‘44', 42]]}

到此这篇关于Python sorted对list和dict排序的文章就介绍到这了,更多相关Python sorted对list和dict排序内容请搜索python博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持python博客!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值