Python:删除重复项后,列表的dict的排序表示,按列表中的元素数排序

时间:2013-01-06 21:48:44

标签: python sorting dictionary

我的字典看起来像这样:

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 方式来做到这一点?

2 个答案:

答案 0 :(得分: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)])]

答案 1 :(得分: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