1

私は次のような辞書を持っています:

example_dict = {
        0: [(1,2),(3,4),(3,4),(4,5)],
        1: [(1,2),(3,4),(5,6),(7,8)],
        2: [(4,5),(7,8)]}

重複を「一時的に」削除した後、各リストの要素数でこの辞書の並べ替えられた表現を取得したいと思います(並べ替えの目的でのみ、削除タプルを削除したくありません)。したがって、ソートexample_dictすると、キーの次の(昇順)順序になります:2,0,1。

これを行うための効率的なPythonicの方法はありますか?

4

2 に答える 2

7
print sorted(example_dict,key=lambda x: len(set(example_dict[x])))

出力:

[2, 0, 1]

または、タプルのリストとしてソートされた辞書項目が必要な場合:

print sorted(example_dict.items(),key=lambda x: len(set(x[1])))

出力:

[(2, [(4, 5), (7, 8)]), (0, [(1, 2), (3, 4), (3, 4), (4, 5)]), (1, [(1, 2), (3, 4), (5, 6), (7, 8)])]
于 2013-01-06T21:53:57.073 に答える
0

おそらく最適なデータ構造はcollections.OrderedDict. 次に、辞書を並べ替えた順序で反復処理できます。

In [1]: from collections import OrderedDict

In [2]: example_dict_sorted = OrderedDict(sorted(example_dict.items(), key=lambda tup: len(set(tup[1]))))

In [3]: example_dict_sorted[0]
Out[3]: [(1, 2), (3, 4), (3, 4), (4, 5)]

In [4]: example_dict_sorted[1]
Out[4]: [(1, 2), (3, 4), (5, 6), (7, 8)]

In [5]: example_dict_sorted[2]
Out[5]: [(4, 5), (7, 8)]

In [6]: for key in example_dict_sorted:
   ...:     print key
2
0
1
于 2013-01-06T22:10:42.203 に答える