Python3写法代码# -*- coding: utf-8 -*-# 需求:年龄倒序,姓名正序from itertools import chainfrom pypinyin import pinyin, Styleclass Student:def __init__(self, name, age):self.name = nameself.age = agedef to_pinyin(stu):lst = pinyin(stu.name, style=Style.TONE3)# 例:[['zhang1'], ['san1']]print(lst)iterator = chain.from_iterable(lst)# 迭代器iterator_for_print = chain.from_iterable(lst)# 迭代器print(iterator_for_print)for item in iterator_for_print:print(item)# 写法一return ''.join(iterator)# 写法二# return ''.join(chain.from_iterable(pinyin(stu.name, style=Style.TONE3)))studentList = [Student("张三", 25),Student("小红", 22),Student("王五", 25),Student("小张", 22),Student("李四", 25),Student("小明", 22)]# 写法一# studentList.sort(key=lambda stu: pinyin(stu.name, style=Style.TONE3))# 写法二studentList.sort(key=lambda stu: to_pinyin(stu))studentList.sort(key=lambda stu: stu.age, reverse=True)print("排序结果:")for student in studentList:print(str(student.age) + " " + student.name)
输出结果【Python 根据两个字段排序 中文排序 汉字排序 升序 降序】
文章插图
Python2写法代码
# -*- coding: utf-8 -*-# 需求:年龄倒序,姓名正序from itertools import chainfrom pypinyin import pinyin, Styleclass Student:def __init__(self, name, age):self.name = nameself.age = agedef to_pinyin(stu):lst = pinyin(stu.name.decode("utf-8"), style=Style.TONE3)# 例:[['zhang1'], ['san1']]print(lst)iterator = chain.from_iterable(lst)# 迭代器iterator_for_print = chain.from_iterable(lst)# 迭代器print(iterator_for_print)for item in iterator_for_print:print(item)# 写法一return ''.join(iterator)# 写法二# return ''.join(chain.from_iterable(pinyin(stu.name.decode("utf-8"), style=Style.TONE3)))studentList = [Student("张三", 25),Student("小红", 22),Student("王五", 25),Student("小张", 22),Student("李四", 25),Student("小明", 22)]# 写法一# studentList.sort(key=lambda stu: pinyin(stu.name.decode("utf-8"), style=Style.TONE3))# 写法二studentList.sort(key=lambda stu: to_pinyin(stu))studentList.sort(key=lambda stu: stu.age, reverse=True)print("排序结果:")for student in studentList:print(str(student.age) + " " + student.name)
输出结果文章插图
C#的示例代码
List<Student> list = new List<Student>(){new Student("张三", 25),new Student("小红", 22),new Student("王五", 25),new Student("小张", 22),new Student("李四", 25),new Student("小明", 22)};//方法一,虽然写法繁琐 , 但思路清晰list.Sort((a, b) =>{if (a.Age != b.Age){return b.Age - a.Age;}else{return string.Compare(a.Name, b.Name);}});//方法二 , 简捷清晰明了//list = list.OrderByDescending(a => a.Age).ThenBy(a => a.Name).ToList();foreach (var item in list){Console.WriteLine(item.Age + " " + item.Name);}Console.Read();class Student{public string Name { get; set; }public int Age { get; set; }public Student(string name, int age){Name = name;Age = age;}}
输出结果文章插图
对比C#,Python的坑
- Python默认的中文排序得不到预期的结果,需要引用pypinyin库解决,相当麻烦,要看懂这个代码,需要了解迭代器
- Python2的pypinyin库只支持unicode编码的字符串,必须通过decode转码,如果不转码,则抛出错误:must be unicode string or [unicode, ...] list
- Python没有大括号,无法直接在lambda表达式中写方法,方法必须定义在lambda表达式外部
- Python的lambda写法相对难以理解
推荐阅读
- el-cascader组件根据最后一级向上找到父级并设置默认值
- python渗透测试入门——基础的网络编程工具
- Python学习三天计划-3
- 数据科学学习手札145 在Python中利用yarl轻松操作url
- win10本地python第三方库安装成功,但是pycharm项目无法使用解决方案
- 三 Selenium+Python系列 - 常见浏览器操作
- 插拔式 Django之同时新增数据到两个数据库表与同时返回两个表的数据
- Vue中使用Switch开关用来控制商品的上架与下架情况、同时根据数据库商品的状态反应到前台、前台修改商品状态保存到数据库
- 二 Selenium+Python系列 - 元素定位那些事
- Python学习三天计划-1