Каков наилучший подход для ранжирования словаря объектов? - PullRequest
0 голосов
/ 17 октября 2019

Учитывая следующие классы:

class Comparison():

    def __init__(self, value):
        self.value = value
        self.rank = 0

class Comparisons(dict):

    def __init__(self):
        super(Comparisons, self).__init__()

    def rank(self):
        # Method to examine each Comparison instance and
        # assign Comparison.rank based on Comparison.value

Как эффективный способ для метода rank() для проверки объектов и присвоения ранга? Например:

comparisons = Comparisons()

# store some Comparison instances
comparisons['one'] = Comparison(10)
comparisons['two'] = Comparison(5)
comparisons['three'] = Comparison(1)

# function to rank the comparisons
comparisons.rank()

print(comparisons['one'].rank)
print(comparisons['two'].rank)
print(comparisons['three'].rank)

Возвращает:

3
2
1

Если метод rank() может обрабатывать связи, это будет еще более выгодно.

1 Ответ

1 голос
/ 17 октября 2019

Это выглядит как наиболее интуитивный (наивный?) Способ:

def rank(self):
    sorted_comparisons = sorted(self.values(), key=lambda c: c.value)
    for rank, comparison in enumerate(sorted_comparisons, 1):
        comparison.rank = rank
...