【问题标题】:Python 3 - How to sort list of dictionaries with keys, using certain field in dict [duplicate]Python 3 - 如何使用字典中的某些字段对带有键的字典列表进行排序[重复]
【发布时间】:2021-02-03 16:29:23
【问题描述】:

嗨,这听起来可能令人困惑,但我会尽力解释。 我的字典列表如下所示:

{
   "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 列表 - [("x",{...}), ("y",{..})...]

如何更改上述代码以保持格式 {"x": {...}, "y": {...}}

【问题讨论】:

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

标签: python python-3.x list sorting dictionary


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 2010-10-09
      相关资源
      最近更新 更多