【问题标题】:Nested dictionary sorting by values in sub dictionary and then length of subdictionary嵌套字典按子字典中的值排序,然后是子字典的长度
【发布时间】:2020-05-24 21:48:31
【问题描述】:

作为一个新手,我正在为嵌套字典的排序而苦苦挣扎。假设我有这两个嵌套字典作为示例:

示例 1:

{'Red': {'Pesho': 2000}, 'Blue': {'Tosho': 1000}, 'Green': {'Gosho': 1000}, 'Yellow': {'Sasho': 4500}, 'Stamat': {'Prakasho': 1000}}

示例 2:

{'Red': {'Pesho': 10000}, 'Blue': {'Pesho': 10000, 'Gosho': 10000}}

现在我需要按分数降序对球员进行排序,然后再按每个球队/颜色内的球员总数降序排序。打印输出应如下所示:

例如1:
(黄色)Sasho 4500
(红色) Pesho 2000
(蓝色)东正 1000
(绿色)Gosho 1000
(Stamat) Prakasho 1000

例如2:
(蓝色) Pesho 10000
(蓝色)Gosho 10000
(红色)比绍 10000

我想它可以通过使用 lambda 的 sorted() 来完成,但我无法理解确切的语法。将非常感谢任何提示。

【问题讨论】:

    标签: python sorting dictionary nested subdirectory


    【解决方案1】:

    我会先通过一个中间表示来关联元素所属组的大小,以便在排序中使用它。

    >>> l2 = [(k,el,d[k][el],len(v)) for k,v in d.items() for el in v]
    >>> l2
    [('Red', 'Pesho', 10000, 1), ('Blue', 'Pesho', 10000, 2), ('Blue', 'Gosho', 10000, 2)]
    

    然后使用 lambda 函数进行排序,其中使用了两个比较项 (score, size of group)

    >>> sorted(l2, key=lambda x:(int(x[2]),x[3]),reverse=True)
    [('Blue', 'Pesho', 10000, 2), ('Blue', 'Gosho', 10000, 2), ('Red', 'Pesho', 10000, 1)]
    

    【讨论】:

    • 如果我做对了,您可以从嵌套字典中提取信息并将其放入元组列表中,您可以在其中根据要求对内容进行排序。我会尝试一下,但想问一下 - 是否可以通过字典推导来做到这一点,其中 lambda 深入到 subdict 中。比如 lambda x: x[y][z] for y in dict[x] 什么的??
    • 您还需要元素所属组的大小,因此您需要以某种方式将其与元素、元组、另一个字典等相关联。
    • 是的,我明白了。该解决方案完美运行。非常感谢。将信息放在另一种更易于管理的结构类型中的想法闪过我的脑海,但由于我以前从未这样做过,所以无法想到这样的解决方案。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多