【问题标题】:Sort list of dictionary by date if date is available else by uid如果日期可用,则按日期对字典列表进行排序,否则按 uid
【发布时间】:2018-10-20 16:20:54
【问题描述】:

如果字典中的日期不是 0,我想按“日期”对字典列表进行排序,否则按“uid”排序。

以下是字典列表

students = [{"name": "Student1", "JoiningDate": 2012, "uid": 5}, {"name": "Student2", "JoiningDate": 2008, "uid":10},
               {"name": "Student3", "JoiningDate": 2017, "uid": 1}]

我用过下面的代码,但是完全错了。

sorted_set = sorted(set_of_students(key=lambda item:item['JoiningDate']) if item["JoiningDate"] != 0 else (key=lambda item:item['uid']))

请帮忙。

【问题讨论】:

    标签: python python-2.7 list sorting


    【解决方案1】:

    我假设您希望在结果末尾聚合日期等于 0 的字典,并按 uid 排序。

    在此假设下,您可以使用如下的元组键:

    students = [{"name": "Student1", "JoiningDate": 2012, "uid": 5},
                {"name": "Student2", "JoiningDate": 2008, "uid":10},
                {"name": "Student3", "JoiningDate": 2017, "uid": 1},
                {"name": "Student4", "JoiningDate": 0, "uid":15},
                {"name": "Student5", "JoiningDate": 2010, "uid":6},
                {"name": "Student6", "JoiningDate": 0, "uid": 3}]
    
    res = sorted(students, key=lambda x: (x['JoiningDate']==0, x['JoiningDate'], x['uid']))
    
    print(res)
    
    [{'JoiningDate': 2008, 'name': 'Student2', 'uid': 10},
     {'JoiningDate': 2010, 'name': 'Student5', 'uid': 6},
     {'JoiningDate': 2012, 'name': 'Student1', 'uid': 5},
     {'JoiningDate': 2017, 'name': 'Student3', 'uid': 1},
     {'JoiningDate': 0, 'name': 'Student6', 'uid': 3},
     {'JoiningDate': 0, 'name': 'Student4', 'uid': 15}]
    

    【讨论】:

    • 感谢您的帮助。有用。你能解释一下吗.. 我假设 x['JoiningDate']==0, x['JoiningDate'], x['uid']) 如果加入日期为 0,则考虑加入日期,否则 uid 是错误的
    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 2013-06-05
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2019-05-27
    • 2011-07-09
    • 2021-01-14
    相关资源
    最近更新 更多