【问题标题】:How to sort the dictionary by descending values and ascending key lengths?如何按降序值和升序键长度对字典进行排序?
【发布时间】:2019-06-28 09:48:30
【问题描述】:

我需要在不使用模块的情况下按降序但按密钥长度的升序获取排序的字典列表。最简单的方法。

我尝试先排序值然后排序键,但无济于事。

蟒蛇

data = {'Nikita': 1, 'Vectoran': 1, 'Aleksei': 2, 'Maksim': 1,
    'Anton': 1, 'Dmitriy': 1, 'Viktor': 3, 'Sergey': 5,
    'Pavel': 1, 'Roman': 1, 'Artemiy': 1, 'Stepan': 1,
    'Evgeniy': 2, 'Ivan': 1, 'Aleksandr': 2, 'Vadim': 1,
    'Abbas': 1, 'Anna': 1}

newdata = data.items()
res = sorted(newdata, key=lambda k: (k[1],k[0]), reverse=True)
print(res)



*output*

[('Sergei', 5), ('Viktor', 3), ('Evgeniy', 2), ('Aleksei', 2), 
('Aleksandr', 2) .....]

*needed*
               len4         len4         len5          len5           
for example [('Anna', 1), ('Ivan', 1), ('Vadim', 1), ('Roman', 1), 
   len6           len6           len7            len7
('Sergey', 5), ('Viktor', 3), ('Evgeniy', 2), ('Dmitriy', 1)......]

【问题讨论】:

    标签: python-3.x sorting


    【解决方案1】:

    您可以使用len 并在lambda 函数中取反。

    这应该会给你你想要的:

    res = sorted(newdata, key=lambda k: (-len(k[0]), k[1]), reverse=True)
    
    **Output**
    [('Anna', 1), ('Ivan', 1), ('Roman', 1), ('Anton', 1), ('Abbas', 1), 
     ('Vadim', 1), ('Pavel', 1), ('Sergey', 5), ('Viktor', 3), ('Nikita', 1), 
     ('Maksim', 1), ('Stepan', 1), ('Aleksei', 2), ('Evgeniy', 2), 
     ('Dmitriy', 1), ('Artemiy', 1), ('Vectoran', 1), ('Aleksandr', 2)]
    

    编辑:更多解释

    因为你想按长度升序排序,但是值降序。如果两个数字都是正数 ((len(k[0]), k[1])),您最终会先按长度排序,然后按值排序,但两者都会升序或降序,具体取决于您设置的 reverse。因此,为了按长度升序 THEN 按值降序排序,我们用-len() 将长度设为负数,并设置reverse=True。如果你用reverse=False 做了(len(k[0]), -k[1]),你应该得到相同的结果。

    【讨论】:

    • 非常感谢!但我有一个问题,为什么(-len),它是如何工作的
    • 它对长度取反(使其为负数),以便您对一个升序和一个降序进行排序。我试图在我的编辑中解释一下。
    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2021-06-09
    • 2021-05-19
    • 2020-11-09
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多