我已经列出了某些学校的某些课程,其中一些课程仍在教授,有些课程已不再教授,有些课程将在未来教授:
[
{'status': 'DEACTIVE', 'name': 'Music'},
{'status': 'DEACTIVE', 'name': 'Juggling'},
{'status': 'ACTIVE', 'name': 'Chess'},
{'status': 'ACTIVE', 'name': 'Dutch Language'},
{'status': 'COMING', 'name': 'Python'},
{'status': 'COMING', 'name': 'Drinking coffee like a pro'},
]
我现在想要订购此列表,以便ACTIVE
是第一个,然后是DEACTIVE
,最后是COMING
。我找到了这样的解决方案:
sorted(a, key=dict.values, reverse=True)
但是只能按字母顺序排序,我想以自定义方式对其进行排序。有人知道我怎么做吗?
答案 0 :(得分:4)
您可以使用具有所有状态权重的字典来执行此操作:
STATUS_RANK = {"ACTIVE": 1, "DEACTIVE": 2, "COMING": 3}
courses.sort(key=lambda x: STATUS_RANK[x['status']])
答案 1 :(得分:0)
我刚刚创建了一个方法来处理它,如下所示调用order_my_list(): 您只需将列表作为参数传递即可!
def order_my_list(lst):
ordered = []
loop = 0
finished_flag = 0
while finished_flag == 0:
for x in range(0,len(lst)):
if loop == 0:
if lst[x]['status'] == 'ACTIVE':
ordered.append(lst[x])
if loop == 1:
if lst[x]['status'] == 'DEACTIVE':
ordered.append(lst[x])
if loop == 2:
if lst[x]['status'] == 'COMING':
ordered.append(lst[x])
if loop == 3:
finished_flag = 1
loop += 1
return ordered
我确定有更好/更快的方法来做到这一点,但这就是我如何解决它,因为我的python知识不是很好:p ...