使用类提供的排序键按值对字典进行排序
Posted
技术标签:
【中文标题】使用类提供的排序键按值对字典进行排序【英文标题】:Sorting a dictionary by values, using a class-provided sort key 【发布时间】:2022-01-08 13:01:12 【问题描述】:我正在使用一个有多个成员的类。这个类提供了一个返回排序键的方法:一个定义实例应该如何排序的元组。我有一个字典,其中的值是此类的实例,由整数标识符索引。
class Dog:
def __init__(self, name: str, age: int):
self.name = name
self.age = age
def sort_key(self):
return (self.name, self.age)
unsorted =
111: Dog('Molly', 3),
112: Dog('Sammy', 5),
113: Dog('Leo', 4),
114: Dog('Sammy', 3)
使用 Python 3.6+(保留字典顺序),我想创建一个按值的类方法排序的字典。我的尝试使用items()
上的lambda 来生成(键,值)元组,我尝试从中调用值的sort_key()
方法:
# GOAL: sort by name and then age, to produce dictionary with keys ordered 113, 111, 114, 112
result = k: unsorted[k] for k in sorted(unsorted.items(), key=lambda i: i[1].sort_key())
这会引发KeyError
。问题似乎不在于我的sorted
电话,而在于我的字典理解。
【问题讨论】:
【参考方案1】:我发现 sorted()
没有返回密钥,而是返回了一个 (key, value)
元组(事后看来,这更有意义)。
以下实现了我的目标:
result = i[0]: i[1] for i in sorted(unsorted.items(), key=lambda i: i[1].sort_key())
【讨论】:
以上是关于使用类提供的排序键按值对字典进行排序的主要内容,如果未能解决你的问题,请参考以下文章