【问题标题】: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 电话,而在于我的字典理解。

【问题讨论】:

    标签: python-3.x dictionary lambda


    【解决方案1】:

    我发现 sorted() 没有返回密钥,而是返回了一个 (key, value) 元组(事后看来,这更有意义)。

    以下实现了我的目标:

    result = {i[0]: i[1] for i in sorted(unsorted.items(), key=lambda i: i[1].sort_key())}
    

    【讨论】:

      猜你喜欢
      • 2011-07-08
      • 1970-01-01
      • 2012-04-12
      • 2016-04-17
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多