【问题标题】:How to alphabetically sort a nested dictionary by key without using OrderedDict如何在不使用 OrderedDict 的情况下按字母顺序对嵌套字典进行排序
【发布时间】:2021-09-25 06:39:46
【问题描述】:

假设我有这个嵌套字典:

people = {
          Kamara: {'sex': 'Male', 'alias': 'John', 'age': '27'},
          Alison: {'age': '21', 'alias': 'Marie', 'sex': 'Female'},
          Oliver: {'alias': 'Marie', 'age': '25', 'sex': 'Female'}
         }

我想按字母顺序对所有内容进行排序。我的意思不仅是主键,还有子键,而不使用 OrderedDict 库。最终的结果应该是这样的:

people = {
          Alison: {'age': '21', 'alias': 'Marie', 'sex': 'Female'},
          Kamara: {'age': '27', 'alias': 'John', 'sex': 'Male'},
          Oliver: {'age': '25', 'alias': 'Marie', 'sex': 'Female'}
        }

这就是我所拥有的:

people = {key: dict(sorted(val.items(), key=lambda ele: ele[1])) for key, val in people.items()}

但我收到此错误:

'str' object has no attribute 'items'

【问题讨论】:

  • 名称需要用引号引起来
  • 如果下面的cmets之一给了你想要的结果,那么请将其标记为答案

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


【解决方案1】:

字典理解可以做到这一点。

people = {
          'Kamara': {'sex': 'Male', 'alias': 'John', 'age': '27'},
          'Alison': {'age': '21', 'alias': 'Marie', 'sex': 'Female'},
          'Oliver': {'alias': 'Marie', 'age': '25', 'sex': 'Female'}
         }


new_dict = {k: {x:y for x,y in sorted(v.items())} for k,v in sorted(people.items())}

print(new_dict)

{'Alison': {'age': '21', 'alias': 'Marie', 'sex': 'Female'}, 
'Kamara': {'age': '27', 'alias': 'John', 'sex': 'Male'}, 
'Oliver': {'age': '25', 'alias': 'Marie', 'sex': 'Female'}}

【讨论】:

  • 谢谢,但我收到此错误:AttributeError: 'list' object has no attribute 'items'
  • 正如我在对您帖子的第一条评论中所说,您的密钥也需要引号@tajir12457
【解决方案2】:
f =  = {k: dict(sorted(v.items(), key=lambda item: item[0])) for k, v in sorted(people.items(), key=lambda item: item[0]) }

输出:

{'Alison': {'age': '21', 'alias': 'Marie', 'sex': 'Female'}, 
'Kamara': {'age': '27', 'alias': 'John', 'sex': 'Male'},
'Oliver': {'age': '25', 'alias': 'Marie', 'sex': 'Female'}}

【讨论】:

    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 2016-04-28
    • 2019-12-01
    • 2013-04-03
    • 2015-05-24
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多