如何在python中订购字典列表

我有字典列表如下:


[

  {'id': 16419, 'name': 'Audi'},

  {'id': 13, 'name': 'BMW'},

  {'id': 31, 'name': 'Honda'},

  {'id': 50060, 'name': 'KTM'},

  {'id': 54, 'name': 'Opel'},

  {'id': 55, 'name': 'Peugeot'},

  {'id': 50083, 'name': 'PGO'},

  {'id': 16350, 'name': 'Skoda'},

  {'id': 68, 'name': 'Suzuki'},

  {'id': 2120, 'name': 'Triumph'},

  {'id': 16328, 'name': 'Others'},

  {'id': 16396, 'name': 'Seat'},

  {'id': 14979, 'name': 'Opel'},

  {'id': 6, 'name': 'Volkswagen'}

]

我想做的是订购它。我希望在列表的开头显示一些具有某些名称值的字典。


我想要例如Volkswagen, Audi, BMW, Opel,Peugeot因为第一个参数出现在列表中。


因此想要的结果应该是这样的:


[

  {'id': 6, 'name': 'Volkswagen'}

  {'id': 16419, 'name': 'Audi'},

  {'id': 13, 'name': 'BMW'},

  {'id': 54, 'name': 'Opel'},

  {'id': 55, 'name': 'Peugeot'},

  {'id': 31, 'name': 'Honda'},

  {'id': 50060, 'name': 'KTM'},

  {'id': 50083, 'name': 'PGO'},

  {'id': 16350, 'name': 'Skoda'},

  {'id': 68, 'name': 'Suzuki'},

  {'id': 2120, 'name': 'Triumph'},

  {'id': 16328, 'name': 'Others'},

  {'id': 16396, 'name': 'Seat'},

  {'id': 14979, 'name': 'Opel'},

]

知道怎么做吗?


智慧大石
浏览 152回答 2
2回答

拉莫斯之舞

您可以使用适当的键功能进行排序。这个首先按给定的名字排序(按给定的顺序)。所有其他品牌都紧随其后,它们之间没有指定顺序:>>> rank = {x: i for i, x in enumerate(['Volkswagen', 'Audi', 'BMW', 'Opel', 'Peugeot'])}# {'Volkswagen': 0, 'Audi': 1, ...}>>> sorted(lst, key=lambda x: rank.get(x['name'], len(rank)))[{'id': 6, 'name': 'Volkswagen'}, {'id': 16419, 'name': 'Audi'}, {'id': 13, 'name': 'BMW'}, {'id': 54, 'name': 'Opel'}, {'id': 14979, 'name': 'Opel'}, {'id': 55, 'name': 'Peugeot'}, {'id': 31, 'name': 'Honda'}, {'id': 50060, 'name': 'KTM'}, {'id': 50083, 'name': 'PGO'}, {'id': 16350, 'name': 'Skoda'}, {'id': 68, 'name': 'Suzuki'}, {'id': 2120, 'name': 'Triumph'}, {'id': 16328, 'name': 'Others'}, {'id': 16396, 'name': 'Seat'}]

呼如林

您可以使用字典来定义自定义排序顺序。dicts = [  {'id': 16419, 'name': 'Audi'},  {'id': 13, 'name': 'BMW'},  {'id': 31, 'name': 'Honda'},  {'id': 50060, 'name': 'KTM'},  {'id': 54, 'name': 'Opel'},  {'id': 55, 'name': 'Peugeot'},  {'id': 50083, 'name': 'PGO'},  {'id': 16350, 'name': 'Skoda'},  {'id': 68, 'name': 'Suzuki'},  {'id': 2120, 'name': 'Triumph'},  {'id': 16328, 'name': 'Others'},  {'id': 16396, 'name': 'Seat'},  {'id': 14979, 'name': 'Opel'},  {'id': 6, 'name': 'Volkswagen'}]brand_order = ['Volkswagen', 'Audi', 'BMW', 'Opel', 'Peugeot']order = dict(zip(brand_order, range(len(brand_order))))dicts_sorted = sorted(dicts, key=lambda d: order.get(d['name'], float('inf')))print(dicts_sorted)输出:[{'id': 6, 'name': 'Volkswagen'},  {'id': 16419, 'name': 'Audi'},  {'id': 13, 'name': 'BMW'}, {'id': 54, 'name': 'Opel'}, {'id': 14979, 'name': 'Opel'}, {'id': 55, 'name': 'Peugeot'}, {'id': 31, 'name': 'Honda'}, {'id': 50060, 'name': 'KTM'}, {'id': 50083, 'name': 'PGO'}, {'id': 16350, 'name': 'Skoda'}, {'id': 68, 'name': 'Suzuki'}, {'id': 2120, 'name': 'Triumph'}, {'id': 16328, 'name': 'Others'}, {'id': 16396, 'name': 'Seat'}]回退以float('inf')确保没有的东西放在order最后。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python