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

Python3-如何使用dict中的特定字段对带有键的字典列表进行排序,python,python-3.x,list,sorting,dictionary,Python,Python 3.x,List,Sorting,Dictionary,嗨,这听起来可能让人困惑,但我会尽我所能解释清楚。 我的词典列表如下所示: { "1": { "bd_date": "04/02/1977", "name": "Deli Mirko", "next": "04/02/2021", "renew": 1, "typ

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

{
   "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对其进行排序

有没有办法做到这一点

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

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


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

您只需使用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})

字典是无序的。这不是一个清单。那是字典中的字典。您可以做的是,您可以有序地将这些词典项复制到列表中。

“但我会尽力解释得最好”-虽然您没有解释太多,但您的要求似乎很明确。你能分享你到目前为止试过的代码吗?我们可以帮助您修复代码这是否回答了您的问题?似乎您只需要使用
sorted()
并指定适当的
键即可。您没有字典列表。您有一个带有字典值的字典。您想要什么样的输出数据结构?字典本质上是无序的(在大多数Python版本中)?请尝试:
lst=sorted(mydicts.values(),key=lambda v:v['until'])
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})