语法 - Python如何给sorted里的key动态的传参数
大家讲道理
大家讲道理 2017-04-18 09:52:23
[Python讨论组]
def sort():
    return sorted(a,key=lambda x:(x['name'],x['age']),reverse=True)

就是说如果我传name就按name排序,如果传name和age就按照这两个key双重排序,如果传了三个key以此类推

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
ringa_lee
def sort(*arg):
    return sorted(a,key=lambda x,*arg:(x[y] for y in arg),reverse=True)

根据你改的,没测试过 ,你可以测测。希望我没写错。
这是我测试的结果:

>>> a = {'a': {'a1': 1, 'a2': 2, 'a3': 3}, 'b': {'a1': 2, 'a2': 1, 'a3': 3}, 'c': {'a1': 1, 'a2': 1, 'a3': 3}}
>>> sort('a1','a2')
['c', 'b', 'a']

看起来没什么问题呢

阿神

一楼的答案是有问题的,虽然不会报错,但是并没有起到排序的效果

下面附验证后的可行方法:

def sort(a, args):
    return sorted(a, key=lambda x: tuple(x[i] for i in args), reverse=True)
    
dic_sorted = sort(lst, ['time', 'id', 'type'])

args接受的是一个列表

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号