为了账号安全,请及时绑定邮箱和手机立即绑定

如何在python中订购字典列表

如何在python中订购字典列表

智慧大石 2021-07-15 18:37:03
我有字典列表如下:[  {'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'},]知道怎么做吗?
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您可以使用适当的键功能进行排序。这个首先按给定的名字排序(按给定的顺序)。所有其他品牌都紧随其后,它们之间没有指定顺序:


>>> 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'}]


查看完整回答
反对 回复 2021-07-28
?
呼如林

TA贡献1798条经验 获得超3个赞

您可以使用字典来定义自定义排序顺序。


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最后。


查看完整回答
反对 回复 2021-07-28
  • 2 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信