Python

Python Namedtuple

Python Namedtuple

Python предлагает множество встроенных структур данных, таких как списки, словари и кортежи, для эффективного хранения и управления данными. Namedtuple - это контейнер, подобный словарю, доступный в модуле «коллекции». Подобно словарям, namedtuple также содержит ключи, которые сопоставлены со значениями. Однако namedtuple позволяет получить доступ к значениям через ключи, а также через индексы. По сравнению со словарями Python доступ к значениям через индексы является дополнительной функциональностью в namedtuple. В этой статье подробно объясняется Python namedtuple с примерами.

Доступ к значениям из namedtuple

Доступ к значениям внутри namedtuple можно получить следующими способами:

  1. Используя ключи
  2. Используя индексы
  3. Используя функцию getattr ()

Поскольку namedtuple преобразует поле в атрибуты, можно легко получить доступ к значениям с помощью функции getattr ().

Примеры

Теперь давайте посмотрим на несколько примеров, чтобы понять создание и работу namedtuple. Чтобы создать и использовать namedtuple, сначала нам нужно импортировать модуль коллекций. В приведенном ниже примере создается именованный кортеж для учителя. Ключи именованного кортежа - это имя, возраст и отдел, соответственно. Доступ к значениям осуществляется с помощью индексов и ключей.

# импорт модуля коллекций
импортные коллекции
# создание именованной пары для учителя
# имя, возраст и отдел - это ключи
Учитель = коллекции.namedtuple ('Учитель', ['имя', 'возраст', 'отдел'])
# создать нового учителя и добавить значения
учитель_джон = Учитель («Джон», 29, «Информатика»)
# доступ к значениям учителя с помощью индексов
print ("Доступ к значениям с помощью индексов:")
print ("Имя учителя:", teacher_john [0])
print ("Возраст учителя:", teacher_john [1])
print ("Отделение учителей:", teacher_john [2])
# доступ к значениям учителя с помощью ключей
print ("Доступ к значениям с помощью ключей:")
print ("Имя учителя:", teacher_john.название)
print ("Возраст учителя:", teacher_john.возраст)
print ("Учительский отдел:", teacher_john.отделение)

Выход

Теперь давайте обратимся к значениям с помощью функции getattr (). Именованный кортеж и ключ передаются в качестве аргумента функции getattr ().

# импорт модуля коллекций
импортные коллекции
# создание именованной пары для учителя
# имя, возраст и отдел - это ключи
Учитель = коллекции.namedtuple ('Учитель', ['имя', 'возраст', 'отдел'])
# создать нового учителя и добавить значения
учитель_джон = Учитель («Джон», 29, «Информатика»)
# доступ к значениям учителя с помощью функции getattr ()
print (getattr (учитель_джон, "имя"))
print (getattr (учитель_джон, "возраст"))
print (getattr (учитель_джон, "отдел"))

Выход

Популярные операции namedtuple

Некоторые популярные функции преобразуют другие коллекции, такие как списки, словари и кортежи, в namedtuple и возвращают информацию namedtuple. Ниже приведены функции, которые преобразуют другие коллекции в namedtuple:-

Функция _make () преобразует итерируемый объект, например список и кортеж, в именованный кортеж. Функция _asdict () создает orderDict из именованного кортежа и возвращает его. Наконец, оператор ** преобразует словарь в именованный кортеж. Кроме того, функции, возвращающие информацию namedtuple, следующие:

Функция _fields () возвращает все поля именованного кортежа, тогда как функция _replace () заменяет конкретное значение другим значением.

Давайте реализуем упомянутые выше функции в нашем скрипте Python, чтобы преобразовать разные коллекции в namedtuple.

# импорт модуля коллекций
импортные коллекции
# создание именованной пары для учителя
# имя, возраст и отдел - это ключи
Учитель = коллекции.namedtuple ('Учитель', ['имя', 'возраст', 'отдел'])
# создать нового учителя и добавить значения
учитель_джон = Учитель («Джон», 29, «Информатика»)
# создание списка
учитель_list = ["Марк", 30, "Деловое администрирование"]
# создание словаря
учитель_dict = 'name': 'Талор', 'возраст': 32, 'факультет': 'Экономика'
# использование функции _make () для преобразования списка в namedtuple
print ("Преобразование списка в именованный кортеж:")
печать (Учитель._make (список_педагогов))
# использование функции _asdict () для создания OrderDict
print ("Создание OrderedDict:")
печать (учитель_джон._asdict ())
# использование ** для преобразования словаря в именованный кортеж
print ("Преобразование словаря в namedtuple:")
печать (Учитель (** учитель_dict))

Выход

Теперь давайте воспользуемся функциями _fields () и _replace (), чтобы получить информацию о ключах и заменить ключи соответственно.

# импорт модуля коллекций
импортные коллекции
# создание именованной пары для учителя
# имя, возраст и отдел - это ключи
Учитель = коллекции.namedtuple ('Учитель', ['имя', 'возраст', 'отдел'])
# создать нового учителя и добавить значения
учитель_джон = Учитель («Джон», 29, «Информатика»)
# использование функции _fields для получения ключей namedtuple
print ("Ключи namedtuple:")
печать (Учитель._fields)
# использование функции _replace для замены значения
print ("Заменяемое значение имени:")
печать (учитель_джон._replace (имя = 'Дональд'))

Выход
В выводе видно, что функция _fields возвращает ключи информации, а функция _replace () успешно заменяет имя.

Заключение

Namedtuple - это контейнер, подобный словарю, присутствующий в модуле «коллекции». Он содержит ключ и сопоставляет значения с ключом. В отличие от словаря Python, к значениям namedtuples также можно получить доступ с помощью индексов и функции getattr (). В этой статье кратко объясняется именованный кортеж на примерах.

Как использовать Xdotool для стимулирования щелчков мыши и нажатия клавиш в Linux
Xdotool - это бесплатный инструмент командной строки с открытым исходным кодом для имитации щелчков мыши и нажатия клавиш. В этой статье будет краткое...
5 лучших эргономичных компьютерных мышей для Linux
Вызывает ли длительное использование компьютера боль в запястье или пальцах?? Вы страдаете от скованности суставов и постоянно должны пожимать руки? В...
Как изменить настройки мыши и сенсорной панели с помощью Xinput в Linux
Большинство дистрибутивов Linux по умолчанию поставляются с библиотекой libinput для обработки событий ввода в системе. Он может обрабатывать события ...