在类的字段上排序dict()

时间:2018-11-28 13:49:05

标签: python sorting dictionary ordereddictionary

我有一本以对象为值的字典。这些对象是以下类的实例:

Class A():

    def __init__(self, x=''):
        self.x = x
        self.count = 0

因此,词典条目的格式为:{'some_key', instance_of_class_A}

现在,我想根据instance_of_A中A.count的值对字典进行排序。

我无法通过大量搜索找到答案,所以希望有人能解决这个问题! 谢谢

3 个答案:

答案 0 :(得分:2)

要对字典的值进行排序,可以执行以下操作:

sorted_values = sorted(dict.values(), key=lambda x: x.count)

但是,我认为没有必要对整个词典进行排序。如果键值可以包含A个对象的列表,并且您希望对其进行排序:

dict[key] = sorted(dict[key], key=lambda x: x.count)

答案 1 :(得分:1)

假设您使用的是可保证排序的Python版本,则需要创建一个新字典,以正确的顺序插入元素。

old_dict = { ... }
new_dict = dict(sorted(old_dict.items(), key=lambda kv: kv[1].count))

答案 2 :(得分:1)

虽然字典在Python 3.6(作为实现细节)中按插入顺序排列,而在3.7+中则按正式顺序排列,但要使用健壮的有序字典,请使用collections.OrderedDict

from collections import OrderedDict

res = OrderedDict(sorted(d.items(), key=lambda x: x[1].count))

OrderedDictdict的子类,因此您不应失去任何功能。

如果此类排序对于您的类对象而言是自然 typical ,请考虑为您的类{{3}定义__eq____lt__方法}},然后使用:

from operator import itemgetter

res = OrderedDict(sorted(d.items(), key=lambda x: x[1]))
res = OrderedDict(sorted(d.items(), key=itemgetter(1)))  # functional equivalent