Найти в Дзене

Программирование на языке python. Стандартная библиотека collections. Урок 2

Оглавление

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Библиотека collections как альтернатива встроенным коллекциям языка python. Компоненты: ChainMap, OrderDict и др.

Это вторая статья по теме библиотеки collections. Первая статья находится здесь. Сегодня два класса ChainMap и OrderDict.

Класс ChainMap

Данный класс позволяет объединять несколько словарей в один объект. При этом все содержимое словарей сохраняется. Можно работать со списком словарей, обращаясь к конкретному словарю по индексу. Ниже представлен пример программы с классом ChainMap.

#!/usr/bin/python3
import collections as c
# класс ChainMap - список словарей
d1 = {"one":111, "two":333}
d2 = {"three":444, "one":123}
d3 = {"four":667, "one":123, "two":100}
d = c.ChainMap(d1, d2, d3)
print(d)
print(d.maps)
print(d['two'])
[print(t['one'], end=' ') for t in d.maps]
print()
d.maps[0]['one'] = d.maps[0]['one'] * 2
print(d.maps[0]['one'])

Результат выполнения программы

ChainMap({'one': 111, 'two': 333}, {'three': 444, 'one': 123}, {'four': 667, 'one': 123, 'two': 100})
[{'one': 111, 'two': 333}, {'three': 444, 'one': 123}, {'four': 667, 'one': 123, 'two': 100}]
333
111 123 123
222

Обращу внимание на метод maps(), он как раз возвращает список словарей. Таким образом со словарями можно работать как с элементами списка.

Класс OrderDict

Класс OrderDict это упорядоченный словарь. В чём смысл его упорядоченности. Сохраняется порядок добавления элементов словаря. И это порядок можно менять.

#!/usr/bin/python3
import collections as c
# класс OrderDict() - упорядоченный словарь
d = c.OrderedDict()
d['a'] = 1
d['b'] = 2
d['c'] = 3
d['d'] = 4
d['e'] = 5
print(dict(d))
d.move_to_end('c', last=True)
print(dict(d))
d.popitem(last=False)
print(dict(d))

Результат выполнения программы

{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
{'a': 1, 'b': 2, 'd': 4, 'e': 5, 'c': 3}
{'b': 2, 'd': 4, 'e': 5, 'c': 3}

Несколько пояснений к программе.

Метод move_to_end() перемещает элемент словаря в начало или его конец в зависимости от значения параметра last.

Метод popitem() удаляет и возвращает элемент словаря с начала или конца списка элементов в зависимости от значения параметра last.

Другие классы collections

В библиотеке есть ещё три класса. Они устарели, хотя из библиотеки их не удаляют. Просто их перечислю: UserString, UserDict, UserList. На их использовании останавливаться не буду, замечу только, что они были когда-то предназначены для замены классов str, dict и list, так как те когда-то не были наследуемы.

Пока всё!

Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.

- И вы коллекционер? - У меня есть коллекция словарей Даля
- И вы коллекционер? - У меня есть коллекция словарей Даля