#python-3.x #dictionary #lambda
#python-3.x #словарь #лямбда
Вопрос:
Я использую класс с несколькими участниками. Этот класс предлагает метод, который возвращает ключ сортировки: кортеж, определяющий, как следует сортировать экземпляры. У меня есть словарь, в котором значения являются экземплярами этого класса, индексированными целочисленным идентификатором.
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()
-код для генерации кортежей (ключ, значение), из которых я пытаюсь вызвать метод значения 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())}