我有一本以对象为值的字典。这些对象是以下类的实例:
Class A():
def __init__(self, x=''):
self.x = x
self.count = 0
因此,词典条目的格式为:{'some_key', instance_of_class_A}
现在,我想根据instance_of_A中A.count的值对字典进行排序。
我无法通过大量搜索找到答案,所以希望有人能解决这个问题! 谢谢
答案 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))
OrderedDict
是dict
的子类,因此您不应失去任何功能。
如果此类排序对于您的类对象而言是自然或 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