在python中对列表进行排序是使用很频繁的操作,一般采用sorted函数或自带的成员函数sort就可以搞定。但是,sorted函数本身功能非常强大,可以对字符串长度、字典键值进行排序。使用下面的代码,可以更进一步的学习掌握。
# 对列表进行排序(字符串采用字母顺序排序)
fruits = ["apple", "banana", "cherry", "date"]
result = sorted(fruits)
print(result) # 输出 ['apple', 'banana', 'cherry', 'date']# 根据字符串长度进行排序
result = sorted(fruits, key=lambda x: len(x))
print(result) # 输出 ['date', 'apple', 'banana', 'cherry']# 降序排序
result = sorted(fruits, reverse=True)
print(result) # 输出 ['date', 'cherry', 'banana', 'apple']
# 根据字符串长度进行排序
fruits = ["apple", "banana", "cherry", "date"]
result = sorted(fruits, key=lambda x: len(x))
print(result) # 输出 ['date', 'apple', 'banana', 'cherry']#根据字典值大小排序(python3.7以后保持了插入顺序)
scoreDict = {'张三': 33,'李四': 36,'王五': 74,'赵六': 56,'李白': 88,'王维': 98,'杜甫': 100,'王昌龄': 89,'王之涣': 97,'王羲之': 93
}
print(scoreDict)#由于items输出时是元祖对象('张三',33),因此 x[1]就能取到成绩值,x[0]取键
scoreDictSorted = sorted(scoreDict.items(), key=lambda x:x[1], reverse=True)
print(scoreDict.items())
print(scoreDictSorted)#利用emuterate输出序号,start参数可以指定开始序号
for index, (name, score) in enumerate(scoreDictSorted, start=1):print(f'第{index}名:{name}\t成绩:{score}')#python3.7以后保持了插入顺序
d=dict(scoreDictSorted)
print(d)
结果:
['apple', 'banana', 'cherry', 'date']
['date', 'apple', 'banana', 'cherry']
['date', 'cherry', 'banana', 'apple']
['date', 'apple', 'banana', 'cherry']
{'张三': 33, '李四': 36, '王五': 74, '赵六': 56, '李白': 88, '王维': 98, '杜甫': 100, '王昌龄': 89, '王之涣': 97, '王羲之': 93}
dict_items([('张三', 33), ('李四', 36), ('王五', 74), ('赵六', 56), ('李白', 88), ('王维', 98), ('杜甫', 100), ('王昌龄', 89), ('王之涣', 97), ('王羲之', 93)])
[('杜甫', 100), ('王维', 98), ('王之涣', 97), ('王羲之', 93), ('王昌龄', 89), ('李白', 88), ('王五', 74), ('赵六', 56), ('李四', 36), ('张三', 33)]
第1名:杜甫 成绩:100
第2名:王维 成绩:98
第3名:王之涣 成绩:97
第4名:王羲之 成绩:93
第5名:王昌龄 成绩:89
第6名:李白 成绩:88
第7名:王五 成绩:74
第8名:赵六 成绩:56
第9名:李四 成绩:36
第10名:张三 成绩:33
{'杜甫': 100, '王维': 98, '王之涣': 97, '王羲之': 93, '王昌龄': 89, '李白': 88, '王五': 74, '赵六': 56, '李四': 36, '张三': 33}
根据多个条件排序:
key后面返回一个元祖,先依据元祖第一个元素排序,再依据元祖第二个元素排序。
先依据数据个位数排序,再依据数据本身排序。
scores = [78, 85, 90, 73, 92,63]
sorted_scores = sorted(scores, key=lambda x: (x % 10, x))
print(sorted_scores)
结果:
[90, 92, 63, 73, 85, 78]