繁体   English   中英

Python3:字典按第三级值排序第二级

[英]Python3 : dict sort 2nd level by 3rd level values

我已经在这个问题上奋斗了几个小时。 我有以下简化的字典

dico = {
    "posts": {
        "k1": {"val": 2},
        "k2": {"val": 1},
        "k3": {"val": 3},
        "k4": {"val": 0},
        }
}

我想按第三级“val”键的值在第二级键(k1,k2 ...)进行排序。 我需要的结果如下:

dico = {
    "posts": {
        "k4": {"val": 0},
        "k2": {"val": 1},
        "k1": {"val": 2},
        "k3": {"val": 3},
        }
}

有没有办法用sorted做到这一点? 我无法比sorted(dico['posts'], key=lambda x: dico['posts'][x]['val'])进一步达到 go ,它给出:

['k4', 'k2', 'k1', 'k3']

提前无限感谢您的帮助!

假设使用 CPython >= 3.7

sorted只能返回一个列表,因此如果您希望仍然能够访问内部 dict(以便以排序方式重新分配它们),您需要对dico['posted'].items()进行排序,否则它将只对键进行排序。

dico['posts'] = dict(sorted(dico['posts'].items(), key=lambda x: x[1]['val']))

现在,由于我们对dico['posts'].items()进行了排序,因此sorted返回了一个已排序的元组列表(尝试打印它),因此我们只需将其转换回dict并将其分配回来。

dico = {
    "posts": {
        "k1": {"val": 2},
        "k2": {"val": 1},
        "k3": {"val": 3},
        "k4": {"val": 0},
        }
}

dico['posts'] = dict(sorted(dico['posts'].items(), key=lambda x: x[1]['val']))
print(dico)

输出

{
    "posts": {
        "k4": {"val": 0},
        "k2": {"val": 1},
        "k1": {"val": 2},
        "k3": {"val": 3},
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM