TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.2K subscribers
Post #7031 2.93K
✔️ How to: 10 вещей, которые можно сделать с Python collections

Модуль collections — это кладезь специализированных контейнеров, которые упрощают код, делают его читаемее и иногда даже быстрее, чем стандартные dict, list, set и tuple.

Вот 10 приёмов, которые могут вас удивить:

1️⃣ Counter — быстрое подсчёты элементов

Используется для подсчёта количества вхождений элементов в последовательности и поиска наиболее частых значений:
from collections import Counter

words = ['galaxy', 'nebula', 'asteroid', 'comet', 'gravitas', 'galaxy', 'stardust', 'quasar', 'galaxy', 'comet']
word_counts = Counter(words)
print(word_counts.most_common(2))


2️⃣ namedtuple — «лёгкие» классы для хранения данных

Создаёт объекты с доступом к полям по имени и индексу, занимают меньше памяти, чем классы:
from collections import namedtuple

Book = namedtuple('Book', ['title', 'author', 'year_published', 'isbn'])
my_book = Book("The Hitchhiker's Guide to the Galaxy", "Douglas Adams", 1979, "978-0345391803")
print(my_book.title, my_book.year_published)


3️⃣ defaultdict — словарь без KeyError

Автоматически создаёт значение для нового ключа, что удобно для группировки данных:
from collections import defaultdict

grouped_scores = defaultdict(list)
for player, score in [('A', 8), ('B', 7), ('A', 6)]:
grouped_scores[player].append(score)
print(grouped_scores)


4️⃣ deque — быстрая очередь и стек

Двусторонняя очередь с быстрым добавлением и удалением с обоих концов:
from collections import deque

q = deque([1, 2, 3])
q.append(4)
q.popleft()
print(q)


5️⃣ OrderedDict — управление порядком элементов

Сохраняет порядок вставки и умеет перемещать элементы в конец или начало:
from collections import OrderedDict

od = OrderedDict(a=1, b=2, c=3)
od.move_to_end('a')
print(list(od.keys()))


6️⃣ ChainMap — объединение словарей без копирования

Позволяет искать ключи в нескольких словарях, как будто это один:
from collections import ChainMap

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
chain = ChainMap(dict1, dict2)
print(chain['b'])


7️⃣ deque с maxlen — ограниченный буфер

Хранит только последние N элементов, автоматически удаляя старые:
from collections import deque

history = deque(maxlen=3)
for cmd in ["cd ~", "ls", "pwd", "mkdir test"]:
history.append(cmd)
print(history)


8️⃣ defaultdict для вложенных структур

Легко создаёт многоуровневые словари без явной инициализации:
from collections import defaultdict
import json

def tree(): return defaultdict(tree)
nested = tree()
nested['user']['name'] = 'Alice'
print(json.dumps(nested, indent=2))


9️⃣ Counter — арифметика частот

Можно складывать, вычитать и находить пересечение частот элементов:
from collections import Counter

c1 = Counter(a=3, b=1)
c2 = Counter(a=1, b=2)
print(c1 + c2, c1 & c2)


🔟 deque.rotate — циклический сдвиг элементов

Быстро сдвигает элементы вправо или влево:
from collections import deque

d = deque([1, 2, 3, 4])
d.rotate(1)
print(d)


🐸 Библиотека питониста

#буст
  • 👍 20
  • ❤ 7
  • 🔥 2
More from @pyproglib
  1. Oct 9, 2026Post #7855
  2. Oct 9, 2026Showboat и Rodney помогают показать работу ИИ-агента Саймон Уиллисон собирает демонстрации…
  3. Oct 7, 2026🎓 С Днём учителя! Учиться никогда не поздно — особенно когда технологии меняются быстрее,…
  4. Oct 3, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  5. Oct 2, 2026🎹 Что делать после ChatGPT? Следующий шаг — AI-агенты. Они не просто отвечают на запросы,…
  6. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →