按d.values()排序字典'd',然后按相应键的长度排序

KKc*_*KKc 0 python sorting python-3.x

我想获得一个带有两个约束的字典的反转顺序.首先,我根据值排序:

>>> d = {'I C': (2, 4), 'B I C': (2, 6), 'B I': (2, 6)}
>>> sortd = sorted(d.items(), key=lambda v: v[1], reverse=True)    (1)
>>> sortd
[('B I', (2, 6)), ('B I C', (2, 6)), ('I C', (2, 4))]
Run Code Online (Sandbox Code Playgroud)

其次,对于具有相同值的项,我想获得之前具有最长键的项.在我之前的例子中,我想要这样的结果:

[('B I C', (2, 6)), ('B I', (2, 6)), ('I C', (2, 4))]
Run Code Online (Sandbox Code Playgroud)

是否可以直接在我的sorted()命令(1)中进行?

Mar*_*ers 5

在sort函数中包含键的长度:

sorted(d.items(), key=lambda v: (v[1], len(v[0])), reverse=True)
Run Code Online (Sandbox Code Playgroud)

输出:

>>> sorted(d.items(), key=lambda v: (v[1], len(v[0])), reverse=True)
[('B I C', (2, 6)), ('B I', (2, 6)), ('I C', (2, 4))]
Run Code Online (Sandbox Code Playgroud)

所以每个项目都按元组排序(value, len(key)); 较长的长度在较长的长度后反向排序,但仅当元组的第一个元素相同时.