首页 > 解决方案 > 如何在列表中对字典进行排序?

问题描述

我在列表中有一个字典

alldata = [{'_id': 657974997549056030, 'experience': 10, 'level': 1, 'last_lvl_box': 16, 'complete_box': 0}, {'_id': 563690668808208423, 'experience': 9080, 'level': 9, 'last_lvl_box': 3430, 'complete_box': 2510}, {'_id': 560529834325966858, 'experience': 5596, 'level': 8, 'last_lvl_box': 2465, 'complete_box': 1500}, {'_id': 589125036053495826, 'experience': 5475, 'level': 8, 'last_lvl_box': 2456, 'complete_box': 1370}, {'_id': 517371726720532511, 'experience': 81, 'level': 3, 'last_lvl_box': 175, 'complete_box': 0}, {'_id': 531858459512012811, 'experience': 750, 'level': 5, 'last_lvl_box': 646, 'complete_box': 100}, {'_id': 159985870458322944, 'experience': 390, 'level': 4, 'last_lvl_box': 365, 'complete_box': 130}, {'_id': 734039231810502699, 'experience': 470, 'level': 4, 'last_lvl_box': 365, 'complete_box': 210}, {'_id': 376364173275430913, 'experience': 280, 'level': 4, 'last_lvl_box': 365, 'complete_box': 20}, {'_id': 155149108183695360, 'experience': 120, 'level': 3, 'last_lvl_box': 166, 'complete_box': 30}, {'_id': 414925323197612032, 'experience': 0, 'level': 1, 'last_lvl_box': 16, 'complete_box': 0}, {'_id': 235088799074484224, 'experience': 200, 'level': 3, 'last_lvl_box': 156, 'complete_box': 100}, {'_id': 442033210420101130, 'experience': 560, 'level': 4, 'last_lvl_box': 365, 'complete_box': 300}, {'_id': 615594944568229931, 'experience': 170, 'level': 3, 'last_lvl_box': 166, 'complete_box': 80}, {'_id': 476676359108952064, 'experience': 0, 'level': 1, 'last_lvl_box': 16, 'complete_box': 0}, {'_id': 234395307759108106, 'experience': 640, 'level': 5, 'last_lvl_box': 666, 'complete_box': 10}, {'_id': 448061528826970113, 'experience': 20, 'level': 2, 'last_lvl_box': 61, 'complete_box': 0}, {'_id': 566605346143993856, 'experience': 10, 'level': 1, 'last_lvl_box': 16, 'complete_box': 10}, {'_id': 458276816071950337, 'experience': 90, 'level': 3, 'last_lvl_box': 166, 'complete_box': 0}, {'_id': 330416853971107840, 'experience': 0, 'level': 1, 'last_lvl_box': 16, 'complete_box': 0}, {'_id': 620689014910877719, 'experience': 10, 'level': 1, 'last_lvl_box': 16, 'complete_box': 10}, {'_id': 818403210200612865, 'experience': 160, 'level': 3, 'last_lvl_box': 166, 'complete_box': 70}, {'_id': 580790817262796811, 'experience': 70, 'level': 2, 'last_lvl_box': 61, 'complete_box': 50}]

如何将这本字典从最高“级别”排序到最低“级别”?

标签: pythonpython-3.x

解决方案


您无法对 a 进行排序,dict因为它是无序的数据结构 - 但您并没有尝试这样做。相反,您正在对字典列表进行排序(这是一个重要的区别)。您可以为此使用内置sorted方法,并使用自定义排序键:

alldata = sorted(alldata, key=lambda dct: dct['level'], reverse=True)

或者您可以调用.sort()列表中的方法对其进行就地排序,使用基本相同的参数:

alldata.sort(key=lambda dct: dct['level'], reverse=True)

我之所以给出reverse=True,是因为默认情况下,排序将最小的放在最后,key将最大的放在key最后,这与我们想要的相反。


如果您想走得更远,例如,通过经验量打破“级别”的关系,那么您可以从 lambda 返回一个元组,其中元素按排序优先级排序:

key=lambda dct: (dct['level'], dct['experience'])

推荐阅读