python - 如何在列表中对字典进行排序?
问题描述
我在列表中有一个字典
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}]
如何将这本字典从最高“级别”排序到最低“级别”?
解决方案
您无法对 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'])
推荐阅读
- scala - 仅减少/折叠一些元素
- javascript - 在 JavaScript 中的 HTML 表格行中构建一个由单元格的名称/值对组成的对象
- anaconda - 为什么路径包含在 conda 提示符中以及如何缩短它
- python - 将 Blob 数据插入 Sqlite3 (GeoPackage)
- nginx - 为什么我在 nginx 反向代理上得到 404?
- kotlin - 处理来自服务的空正文响应
- java - 如何用鼠标单击 LibGdx 创建对象
- python - 如何在 fasta 文件中并行化计算,其中每个处理器采用一个序列
- opencart - 如何在 OpenCart 扩展中转换安装/卸载方法
- pandoc - 当 biblio 文件仅在 YAML 元数据中时,pandoc 不会生成参考书目