Сортировать список словаря по дате, если дата доступна еще по uid - PullRequest
0 голосов
/ 10 мая 2018

Я хочу отсортировать список словарей по «дате», если в словаре нет даты, иначе по «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']))

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 10 мая 2018

Я предполагаю, что вы хотите объединить словари, в которых дата равна 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}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...