首页 > 编程语言 >Python如何根据两个字段进行排序?

Python如何根据两个字段进行排序?

时间:2022-10-24 10:35:38浏览次数:43  
标签:25 name Python Age 如何 Student new 排序 age

Python如何根据两个字段进行排序?
写这个博客,就是为了吐槽Python!

对于这个问题,首先,我花了一天时间,没有解决!
当然是百度了,一搜,有很多博客,无一例外,都是垃圾!
有的,只排数组!实体类不考虑了?
有的,只排数字!不排中文?Python中文排序有问题知不知道?!
有的,只排中文!就排了一个字段?

通过百度,倒时很快写出来一个,因为始终不对,折腾一天!

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

from itertools import chain
from pypinyin import pinyin, Style


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


def to_pinyin(stu):
    print "这个print为什么不输出?"
    return ''.join(chain.from_iterable(pinyin(stu.name, style=Style.TONE3)))


studentList = [
    Student("张三", 25, 190),
    Student("小红", 22, 173),
    Student("小张", 22, 177),
    Student("王五", 25, 187),
    Student("李四", 25, 172),
    Student("小明", 22, 175)
]

studentList.sort(key=lambda x: (-x.age, to_pinyin))

for student in studentList:
    print str(student.age) + " " + student.name + " " + str(student.height)

输出结果:

很显然,这个结果,它不对!

随便用C#写了一个:

List<Student> list = new List<Student>()
{
    new Student("张三",25),
    new Student("小红",22),
    new Student("小张",22),
    new Student("王五",25),
    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正确的到底怎么写呢?
好吧,被移出博客园首页!

标签:25,name,Python,Age,如何,Student,new,排序,age
From: https://www.cnblogs.com/s0611163/p/16820456.html

相关文章

  • 如何用vscode调试远程服务器pymarl框架代码
    前言pymarl是多智能体强化学习算法在星际争霸II游戏上的一个框架,之前都是用pycharm调试,后面想用vscode,就去了解了下。配置在vscode里面点击运行,然后点击添加配置。......
  • 【Python基础学习】第十二节 文件操作
    Python基础学习之文件操作1.open()函数想要对文件进行操作,必须先建立文件对象,然后再对文件对象进行操作;想要建立文件对象,需要使用open()函数;open()函数使用方法如下:f......
  • Thanos 架构剖析(六)告警规则如何管理
    ThanosRule组件通过thanosrule命令来启动,通过重复查询Query来评估告警是否触发,如果有多个Query,那么会通过轮询来保持平衡。默认情况下,Rule评估结果以Prometheu......
  • 【Python基础学习】第十三节 异常操作总结
    Python基础学习之异常操作总结在Python运行遇到异常时,程序会终止;而在我们编程过程中,错误是不可避免的,这时我们需要捕捉到异常,还需要程序继续运行;这时我们就需要根据异常Tra......
  • OpenGlES:如何加载着色器代码
    加载着色器程序:参考链接:https://juejin.cn/post/7134356782452834334对应于代码实现:ps:一个是着色器对象,表示一段具体的着色器代码的抽象,另一个是着色器程序,表示整个图形......
  • Python&JS宏 实现保留样式合并表格后拆分
    ......
  • 如何实现一个SQL解析器
    ​作者:vivo互联网搜索团队-DengJie一、背景随着技术的不断的发展,在大数据领域出现了越来越多的技术框架。而为了降低大数据的学习成本和难度,越来越多的大数据技术和应......
  • Python while循环
    1.简单的while循环【实例】:number=1whilenumber<=5:print(number)number+=1【运行结果】:12345 2.使用break退出循环【实例】:number=1......
  • 公众号文章里的qq音乐如何批量下载
    公众号文章里的qq音乐如何批量下载 打开的文章内,播放音乐,注意开发者工具中,网络选项卡中,有media类型的请求.那就是音乐.那么这条media的请求,就是音乐地址.https://......
  • python 中xlrd模块
    一、模块介绍    1、xlrd是用来操作读取excel表格的库,支持xlsx和xls两种格式    2、安装方式?pip3installxlrd    3、导入方式importxlrd......