0

我想获得具有两个约束的字典的相反顺序。首先,我根据值进行排序:

>>> 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))]

其次,对于具有相同值的项目,我想获得之前键最长的项目。在我之前的示例中,我希望得到以下结果:

[('B I C', (2, 6)), ('B I', (2, 6)), ('I C', (2, 4))]

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

4

1 回答 1

5

在排序函数中包含键的长度:

sorted(d.items(), key=lambda v: (v[1], len(v[0])), reverse=True)

输出:

>>> 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))]

所以每个项目都在元组上排序(value, len(key));较短的长度在较长的长度之后进行反向排序,但前提是元组的第一个元素相同。

于 2013-01-23T10:39:54.830 回答