Python3如何使用dict中的特定字段对带有键的字典列表进行排序

2024-09-22 20:37:51 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,这听起来可能让人困惑,但我会尽我所能解释清楚。 我的词典列表如下所示:

{
   "1": {
      "bd_date": "04/02/1977",
      "name": "Deli Mirko",
      "next": "04/02/2021",
      "renew": 1,
      "type": "birthday",
      "until": 1
   },
   "-MScOoqCpbVxSpz56j0B": {
      "bd_date": "25/11/1983",
      "name": "Deli Marina",
      "next": "25/11/2021",
      "renew": 1,
      "type": "birthday",
      "until": 295
   },
   "-MScWwQ6-23Sdd50YoQh": {
      "bd_date": "17/04/1952",
      "name": "Deli Geza",
      "next": "17/04/2021",
      "renew": 1,
      "type": "birthday",
      "until": 73
   }
}

我希望使用“直到”值ASC对其进行排序

有没有办法做到这一点

编辑: 我尝试了建议的解决方案,但没有得到结果,或者它改变了我的字典格式。我需要保持格式,因为剩下的代码。 我试过了

new_list = sorted(old_list.items(), key=lambda i: i[1]['until'])

但它将格式从dict改为list-[((“x”,{…}),(“y”,{…})…]

如何更改上述代码以保持格式{“x”:{…},“y”:{…}


Tags: 代码name列表date格式typebdlist
2条回答

您只需要使用sorted并指定要排序的子关键字,如下所示

我还应该指出,在本文中,我认为您不是指Python列表,尽管您只是指您有一个字典对象,并且您希望迭代它们:

unsorted_dictionary = {
   "1": {
      "bd_date": "04/02/1977",
      "name": "Deli Mirko",
      "next": "04/02/2021",
      "renew": 1,
      "type": "birthday",
      "until": 1
   },
   "-MScOoqCpbVxSpz56j0B": {
      "bd_date": "25/11/1983",
      "name": "Deli Marina",
      "next": "25/11/2021",
      "renew": 1,
      "type": "birthday",
      "until": 295
   },
   "-MScWwQ6-23Sdd50YoQh": {
      "bd_date": "17/04/1952",
      "name": "Deli Geza",
      "next": "17/04/2021",
      "renew": 1,
      "type": "birthday",
      "until": 73
   }
}

sorted_dictionary = sorted(unsorted_dictionary.items(), key=lambda item: item[1]['until'])

print(sorted_dictionary)
# [('1', {'bd_date': '04/02/1977', 'name': 'Deli Mirko', 'next': '04/02/2021', 'renew': 1, 'type': 'birthday', 'until': 1}), ('-MScWwQ6-23Sdd50YoQh', {'bd_date': '17/04/1952', 'name': 'Deli Geza', 'next': '17/04/2021', 'renew': 1, 'type': 'birthday', 'until': 73}), ('-MScOoqCpbVxSpz56j0B', {'bd_date': '25/11/1983', 'name': 'Deli Marina', 'next': '25/11/2021', 'renew': 1, 'type': 'birthday', 'until': 295})]

for item in sorted_dictionary:
    print(item)
# ('1', {'bd_date': '04/02/1977', 'name': 'Deli Mirko', 'next': '04/02/2021', 'renew': 1, 'type': 'birthday', 'until': 1})
# ('-MScWwQ6-23Sdd50YoQh', {'bd_date': '17/04/1952', 'name': 'Deli Geza', 'next': '17/04/2021', 'renew': 1, 'type': 'birthday', 'until': 73})
# ('-MScOoqCpbVxSpz56j0B', {'bd_date': '25/11/1983', 'name': 'Deli Marina', 'next': '25/11/2021', 'renew': 1, 'type': 'birthday', 'until': 295})

字典是无序的。这不是一个清单。那是字典中的字典。你能做的就是把那些词典条目有序地复制到一个列表中

相关问题 更多 >