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)
输出结果

文章插图
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;}}
输出结果【Python 根据两个字段排序 中文排序 汉字排序 升序 降序】
文章插图
对比C#,Python的坑
- Python默认的中文排序得不到预期的结果,需要引用pypinyin库解决,相当麻烦,要看懂这个代码,需要了解迭代器
- Python2的pypinyin库只支持unicode编码的字符串,必须通过decode转码,如果不转码,则抛出错误:must be unicode string or [unicode, ...] list
- Python没有大括号,无法直接在lambda表达式中写方法,方法必须定义在lambda表达式外部
- Python的lambda写法相对难以理解
经验总结扩展阅读
- 程序员工资一般多少 需要什么学历
- 转弯不让直行是全责吗
- 好运已到账 未来两个月注定发横财中大奖的4大星座
- el-cascader组件根据最后一级向上找到父级并设置默认值
- python渗透测试入门——基础的网络编程工具
- 如何根据餐厅选餐桌尺寸 餐桌用哪种材质的好
- 贵州省晚婚晚育产假规定
- Python学习三天计划-3
- 招财霸气的女装店名两个字 起个聚财的店名
- 坐高铁选D还是F座