0

2つの制約がある辞書の逆順を取得したいと思います。まず、値に従って並べ替えます。

>>> 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 に答える