Skip to main content
 首页 » 编程设计

python之如何以正确的方式对字典列表进行排序 Python

2025年05月04日19qq号

我有如下列表:

data = [ 
  {'items': [ 
    {'key': u'3', 'id': 1, 'name': u'Typeplaatje'}, 
    {'key': u'2', 'id': 2, 'name': u'Aanduiding van het chassisnummer '}, 
    {'key': u'1', 'id': 3, 'name': u'Kilometerteller: Kilometerstand '}, 
    {'key': u'5', 'id': 4, 'name': u'Inschrijvingsbewijs '}, 
    {'key': u'4', 'id': 5, 'name': u'COC of gelijkvormigheidsattest '} 
  ], 'id': 2, 'key': u'B', 'name': u'Onderdelen'}, 
  {'items': [ 
    {'key': u'10', 'id': 10, 'name': u'Koppeling'}, 
    {'key': u'7', 'id': 11, 'name': u'Differentieel '}, 
    {'key': u'9', 'id': 12, 'name': u'Cardanhoezen '}, 
    {'key': u'8', 'id': 13, 'name': u'Uitlaat '}, 
    {'key': u'6', 'id': 15, 'name': u'Batterij'} 
    ], 'id': 2, 'key': u'B', 'name': u'Onderdelen'} 
] 

我想按键对items进行排序。

因此想要的结果如下:

res = [ 
      {'items': [ 
        {'key': u'1', 'id': 3, 'name': u'Kilometerteller: Kilometerstand '}, 
        {'key': u'2', 'id': 2, 'name': u'Aanduiding van het chassisnummer '}, 
        {'key': u'3', 'id': 1, 'name': u'Typeplaatje'}, 
        {'key': u'4', 'id': 5, 'name': u'COC of gelijkvormigheidsattest '},         
        {'key': u'5', 'id': 4, 'name': u'Inschrijvingsbewijs '}, 
 
      ], 'id': 2, 'key': u'B', 'name': u'Onderdelen'}, 
      {'items': [ 
        {'key': u'6', 'id': 15, 'name': u'Batterij'}, 
        {'key': u'7', 'id': 11, 'name': u'Differentieel '}, 
        {'key': u'8', 'id': 13, 'name': u'Uitlaat '}, 
        {'key': u'9', 'id': 12, 'name': u'Cardanhoezen '}, 
        {'key': u'10', 'id': 10, 'name': u'Koppeling'}         
        ], 'id': 2, 'key': u'B', 'name': u'Onderdelen'} 
    ] 

我试过如下:

res = [] 
for item in data: 
  new_data = { 
    'id': item['id'], 
    'key': item['key'], 
    'name': item['name'], 
    'items': sorted(item['items'], key=lambda k : k['key'])  
  } 
  res.append(new_data) 
 
print(res) 

第一个排序很好,但第二个不是。

我做错了什么,是否有更好的方法?

请您参考如下方法:

在第二种情况下,您的排序是错误的,因为键是字符串,如果您的键是 '10',则字符串按第一个字符 '1' 排序>。对您的排序功能稍作修改即可解决问题:

'items': sorted(item['items'], key=lambda k : int(k['key']) 

我正在做一个 int 因为你想对它们进行排序,就好像它们是数字一样。它在您的代码中:

res = [] 
for item in data: 
  new_data = { 
    'id': item['id'], 
    'key': item['key'], 
    'name': item['name'], 
    'items': sorted(item['items'], key=lambda k : int(k['key']) ) 
  } 
  res.append(new_data) 
 
print(res) 

结果如下:

[{'id': 2, 
  'items': [{'id': 3, 'key': '1', 'name': 'Kilometerteller: Kilometerstand '}, 
            {'id': 2, 'key': '2', 'name': 'Aanduiding van het chassisnummer '}, 
            {'id': 1, 'key': '3', 'name': 'Typeplaatje'}, 
            {'id': 5, 'key': '4', 'name': 'COC of gelijkvormigheidsattest '}, 
            {'id': 4, 'key': '5', 'name': 'Inschrijvingsbewijs '}], 
  'key': 'B', 
  'name': 'Onderdelen'}, 
 {'id': 2, 
  'items': [{'id': 15, 'key': '6', 'name': 'Batterij'}, 
            {'id': 11, 'key': '7', 'name': 'Differentieel '}, 
            {'id': 13, 'key': '8', 'name': 'Uitlaat '}, 
            {'id': 12, 'key': '9', 'name': 'Cardanhoezen '}, 
            {'id': 10, 'key': '10', 'name': 'Koppeling'}], 
  'key': 'B', 
  'name': 'Onderdelen'}]