首页 > 编程语言 >Python 根据两个字段排序 中文排序 汉字排序 升序 降序

Python 根据两个字段排序 中文排序 汉字排序 升序 降序

时间:2022-10-24 18:23:15浏览次数:46  
标签:name Python pinyin print stu Student 升序 排序

Python 根据两个字段排序 中文排序 汉字排序 升序 降序
Python 根据两个字段排序 中文排序 汉字排序 升序 降序
Python 根据两个字段排序 中文排序 汉字排序 升序 降序

Python3写法

代码

# -*- coding: utf-8 -*-

# 需求:年龄倒序,姓名正序

from itertools import chain
from pypinyin import pinyin, Style


class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age


def 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 chain
from pypinyin import pinyin, Style


class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age


def 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的坑

  1. Python默认的中文排序得不到预期的结果,需要引用pypinyin库解决,相当麻烦

标签:name,Python,pinyin,print,stu,Student,升序,排序
From: https://www.cnblogs.com/s0611163/p/16822014.html

相关文章

  • 7.3 ElasticSearch运行机制之排序
    1.简介elasticsearch默认采用相关性算分排序,用户可以通过设定sort参数自行设定排序规则。2.query查询job字段为“Javaengineer”的文档,然后按照出生日期为第一排序字段、......
  • Django drf 排序
    Djangodrf排序18.1全局配置配置排序类REST_FRAMEWORK={......'DEFAULT_FILTER_BACKENDS':('rest_framework.filters.OrderingFilte......
  • 【Python基础学习】第十一节 内置函数详解
    Python基础学习之内置函数Python3.5版本中的68个内置函数,按顺序逐个进行了自认为详细的解析,现在是时候进行个总结了。为了方便记忆,将这些内置函数进行了如下分类:1.数学运......
  • 解决selenium+python 打开浏览器报错 DeprecationWarning executable_path has been d
    报错如下:解决方案:直接上代码如下:#-*-coding:utf-8-*-"""@Time:2022/10/2416:03@Auth:软件测试君@File:wait_demo.py@IDE:PyCharm@Motto:ABC(AlwaysBeCod......
  • 人家网站都免费了,你还用Python去爬?
    ⛳️实战场景这次实战的目标是一个叫做猫肯的字体站点,该站点所有的字体都是免费可商用的,所以为什么还要去下载呢?答案是练手,借免费站点学习爬虫,......
  • python校验各国手机号格式是否正确
    下载库phonenumbersgithub地址defverify_phone_number(phone_number:str)->(bool,int):"""校验各国手机号格式"""z=phonenumbers.parse(ph......
  • 莫烦python的tf神经网络训练例子(1)
    importtensorflowastfimportnumpyasnp#导入有关数学的包#随机生成一些数据createdatax_data=np.random.rand(100).astype(np.float32)y_data=x_data*0.......
  • Python基础之Python注释,变量
    注释在Python中有两种形式:单⾏注释与多行注释☆单⾏注释单⾏注释只能注释一行内容,基本语法:#注释内容☆多⾏注释多行注释可以注释多行内容,常用于代码块......
  • python渗透测试入门——基础的网络编程工具
    《Python黑帽子——黑客与渗透测试编程之道学习》这本书是我在学习安全的过程中发现的在我看来十分优秀的一本书,业内也拥有很高的评价,所以在这里将自己的学习内容分享出来......
  • 第十九关——排序(重新来过)
    那就从排序开始重新的c++程序之旅吧!2022-10-2414:08:51排序一般分为三类:选择排序、插入排序、冒泡排序堆排序、归并排序、快速排序(快排)、希尔排序基数排序、计......