Рубрики
Без рубрики

Модуль коллекций Python: Заказан

Чего мы пытаемся достичь? Если вы помните из последнего поста, вот разрешение метода … Tagged с Python, Codenewbie, коллекции.

Модуль коллекций Python (серия 9 деталей)

Чего мы пытаемся достичь?

Если вы помните из последнего поста, вот порядок разрешения метода Counter Class: Мы никак не можем поменять приоритетный заказ. Один из вариантов должен быть дерзким 😛 и использовать __repr__ Метод Builtins.dict

Опция 1: Набрать встречный объект для диктата

Согласно Счетчик к диктат , Печать будет использовать __repr__ Метод дикта Что убедится, что заказ поддерживается!

Но это не привлекает идею дома, я имею в виду, что, если новичок смотрит на этот код? Он понятия не имеет, почему мы играем Счетчик к диктат . Так что лучшим подходом будет создание нашего собственного обычая Заказан Каунтер класс для ясность Анкет

Вариант 2: Создание пользовательского класса OrderedCounter

Мы можем создать класс, который наследует от Счетчик и реализовать свою собственную версию __repr__ метод

Идея остается той же: бросьте Счетчик к диктат Но на этот раз, предоставив абстракция и тем самым улучшая читаемость кода.

class OrderedCounter(Counter):
    'Counter that remembers the order elements are first encountered'

    def __repr__(self):
                        # casting 'self' to dict will do the job
        return '%s(%r)' % (self.__class__.__name__, dict(self))

    def __reduce__(self):
        return self.__class__, (dict(self),)

Здесь экземпляр (творение) Заказан Каунтер Объект будет выполнен __init__ Метод Счетчик класс. Это означает объект типа Заказан Каунтер Содержит подсчет значений в инициативе, пройденном a.k.a ведет себя как Счетчик Анкет

__reduce__ Method Inlepletanate необходим для цели «мариновано», которую мы обсудим в каком -то другом посте.

Заказал Counter в действии!

# creating Ordered Counters
ordered_c0 = OrderedCounter('kkkaaaajjjjkkaaakklll')
ordered_c1 = OrderedCounter(["oranges", "apples", "apples", "bananas",
                             "kiwis", "kiwis", "apples"])


print(ordered_c0, ordered_c1, sep='\n')

"""OUTPUT => Order Maintained 

{'k': 7, 'a': 7, 'j': 4, 'l': 3}
{'oranges': 1, 'apples': 3, 'bananas': 1, 'kiwis': 2}
"""

Есть и другие способы, но знание этих двух способов более чем достаточно!

Использованная литература:

https://stackoverflow.com/questions/35446015/creating-an-ordered-counter

Модуль коллекций Python (серия 9 деталей)

Оригинал: “https://dev.to/kathanvakharia/python-s-collections-module-ordered-counter-2nhc”