【问题标题】:Sort a complex python dictionary?对复杂的python字典进行排序?
【发布时间】:2019-01-30 17:01:58
【问题描述】:

很抱歉,如果这个问题之前已经被问过,我阅读了一些主题,但到目前为止它对我没有帮助。

我从软件 API 得到这个 JSON 响应:

 {
    u 'code': 0, u 'message': u 'Found: 367', u 'objects': {
        u 'ApplicationSolution::15056': {
            u 'fields': {
                u 'id': u '15056',
                u 'name': u 'R'
            },
            u 'message': u '',
            u 'code': 0,
            u 'class': u 'ApplicationSolution',
            u 'key': u '15056'
        },
        u 'ApplicationSolution::15758': {
            u 'fields': {
                u 'id': u '15758',
                u 'name': u 'Z'
            },
            u 'message': u '',
            u 'code': 0,
            u 'class': u 'ApplicationSolution',
            u 'key': u '15758'
        },
        u 'ApplicationSolution::15053': {
            u 'fields': {
                u 'id': u '15053',
                u 'name': u 'E'
            },
            u 'message': u '',
            u 'code': 0,
            u 'class': u 'ApplicationSolution',
            u 'key': u '15053'
        },
        u 'ApplicationSolution::15050': {
            u 'fields': {
                u 'id': u '15050',
                u 'name': u 'C'
            },
            u 'message': u '',
            u 'code': 0,
            u 'class': u 'ApplicationSolution',
            u 'key': u '15050'
        },
}

我想使用 ApplicationSolution 名称(对象 > ApplicationSolution:xxxxx > 字段 > 名称)对该响应进行排序。我尝试用 sorted 来做到这一点,但我没有找到正确的语法:(

有人可以帮帮我吗?

非常感谢!

【问题讨论】:

  • 你试过什么?结局如何?
  • 您无法对字典进行排序,因此您必须让我们知道您希望输出的样子。
  • 能否提供MCVE
  • @thebjorn 我需要相同的输出,但使用 ApplicationSolution 名称排序。我想我必须将这个字典转换为列表,这不是问题,但我坚持使用 sorted then。

标签: python sorting dictionary


【解决方案1】:

我会首先将字典转换为 2 元组列表,然后使用适当的字段对列表进行排序。它可以很简单(假设全局字典称为j):

sorted([(k,v) for k,v in j['objects'].items()], key=(lambda x: x[1]['fields']['name']))

【讨论】:

  • 这正是我所需要的,我试图做类似的事情,但我的语法不好。谢谢你的回答!
【解决方案2】:

如果d 是你的字典,那么

def fieldname((k, v)):
    return v['fields']['name']
d['objects'] = list(sorted(d['objects'].items(), key=fieldname))

会在现场进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 2015-03-14
    • 2015-12-26
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多