Суммирование с помощью словарей Python

summirovanie s pomoshhju slovarej python Текст и язык

Функция summer вполне работоспособна, но ее можно обобщить еще больше — сделав номера колонок ключами словаря, а не смещениями в списке, можно вообще избавиться от необходимости использовать номера колонок. Помимо того, что словари позволяют ассоциировать данные с описательными метками, а не с числовыми позициями, они часто оказываются более гибкими, чем списки, особенно когда число колонок в файле не является фиксированным. Например, предположим, что необходимо вычислить суммы колонок данных в текстовом файле, когда число колонок заранее неизвестно или оно не является фиксированным:

C:\\PP4E\Lang> python

>>> print(open(‘table4.txt’).read())

001.1 002.2 003.3

010.1 020.2 030.3 040.4

100.1 200.2 300.3

В этой ситуации нет возможности заранее определить список сумм фиксированной длины, потому что количество колонок в разных строках может отличаться. Операция разбиения по пробельным символам извлекает колонки, а функция float преобразует их в числа, но список фиксированного размера не так-то просто приспособить для хранения сумм (по крайней мере, без дополнительного программного кода, управляющего его размером). Здесь удобнее использовать словари, потому что появляется возможность использовать позиции колонок в качестве ключей, вместо абсолютных смещений в списке. Это решение демонстрируется в следующем листинге интерактивного сеанса (определение функции находится также в файле summer3.py в пакете примеров):

>  >> sums = {}

>  >> for line in open(‘table4.txt’):

cols = [float(col) for col in line.split()]

for pos, val in enumerate(cols):

sums[pos] = sums.get(pos, 0.0) + val

>  >> for key in sorted(sums):

print(key, ‘=’, sums[key])

0 = 111.3

1 = 222.6

2 = 333.9

3 = 40.4

>>> sums

{0: 111.3, 1: 222.6, 2: 333.90000000000003, 3: 40.4}

Интересно отметить, что в этом программном коде используются инструменты, которыми Python обрастал с годами, — итераторы файлов и словарей, генераторы, метод dict.get, встроенные функции enumerate и sorted отсутствовали в Python в первые годы его развития. Похожие примеры можно найти в главе 9, в обсуждении механизма библиотеки tkinter компоновки по сетке, где для работы с таблицами также используется функция eval. Логика вычисления сумм, реализованная в той главе, является вариацией на эту же тему — она получает количество колонок из первой строки в файле с данными и выполняет суммирование для отображения в графическом интерфейсе.

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

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий