Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのnamedtuple(ネームドタプル)とは?使い方をサンプルコード付きで解説

Pythonのnamedtuple(ネームドタプル)とは

namedtupleは、Pythonの標準ライブラリ「collections」モジュールに含まれるクラスの一つです。辞書型オブジェクトと同様にキーと値を持ちますが、タプルの特性も併せ持っているため、インデックスとキーの両方で要素にアクセスできるのが大きな特徴です。

namedtupleを使用するには、まずcollectionsモジュールをインポートする必要があります。

import collections

以下では、namedtupleクラスの主な機能と使い方を詳しく見ていきましょう。

namedtupleの要素へのアクセス方法

namedtupleの値には、「インデックス」「キー(属性名)」「getattr()メソッド」の3つの方法でアクセスできます。namedtupleの属性値は順序付けられているため、通常のタプルと同じようにインデックスでアクセスすることが可能です。

また、namedtupleはフィールド名を属性として扱うため、getattr()メソッドを使って属性からデータを取得することもできます。

サンプルコード

import collections as col
# 従業員のnamedtupleを作成
Employee = col.namedtuple('Employee', ['name', 'city', 'salary'])
# 従業員を2名追加
e1 = Employee('Asim', 'Delhi', '25000')
e2 = Employee('Bibhas', 'Kolkata', '30000')
# インデックスを使って要素にアクセス
print('The name and salary of e1: ' + e1[0] + ' and ' + e1[2])
# 属性名を使って要素にアクセス
print('The name and salary of e2: ' + e2.name + ' and ' + e2.salary)
# getattr()を使って要素にアクセス
print('The City of e1 and e2: ' + getattr(e1, 'city') + ' and ' + getattr(e2, 'city'))

実行結果

The name and salary of e1: Asim and 25000
The name and salary of e2: Bibhas and 30000
The City of e1 and e2: Delhi and Kolkata

他のコレクションからの変換方法

他のコレクション型をnamedtupleに変換する方法がいくつか用意されています。_make()メソッドを使えば、リストやタプルなどのイテラブルなオブジェクトをnamedtupleオブジェクトに変換できます。

また、辞書型オブジェクトをnamedtupleに変換することも可能です。この変換には「**」演算子を使用します。

さらに、_asdict()メソッドを使うことで、namedtupleの値をキー付きのOrderedDict型オブジェクトとして取得できます。

サンプルコード

import collections as col
# 従業員のnamedtupleを作成
Employee = col.namedtuple('Employee', ['name', 'city', 'salary'])
# リストの値をEmployeeに変換
my_list = ['Asim', 'Delhi', '25000']
e1 = Employee._make(my_list)
print(e1)
# 辞書をEmployeeに変換
my_dict = {'name':'Bibhas', 'city' : 'Kolkata', 'salary' : '30000'}
e2 = Employee(**my_dict)
print(e2)
# namedtupleを辞書として表示
emp_dict = e1._asdict()
print(emp_dict)

実行結果

Employee(name='Asim', city='Delhi', salary='25000')
Employee(name='Bibhas', city='Kolkata', salary='30000')
OrderedDict([('name', 'Asim'), ('city', 'Delhi'), ('salary', '25000')])

namedtupleのその他の便利な操作

namedtupleには、_fields()や_replace()といった便利なメソッドも用意されています。_fields()メソッドを使うと、namedtupleが持つフィールドの一覧を確認できます。また、_replace()メソッドは、既存の値を別の値に置き換える際に使用します。

サンプルコード

import collections as col
# 従業員のnamedtupleを作成
Employee = col.namedtuple('Employee', ['name', 'city', 'salary'])
# 従業員を1名追加
e1 = Employee('Asim', 'Delhi', '25000')
print(e1)
print('The fields of Employee: ' + str(e1._fields))
# 従業員e1の都市を置き換え
e1 = e1._replace(city='Mumbai')
print(e1)

実行結果

Employee(name='Asim', city='Delhi', salary='25000')
The fields of Employee: ('name', 'city', 'salary')
Employee(name='Asim', city='Mumbai', salary='25000')

まとめ

namedtupleを使うと、タプルの軽量さと辞書のような可読性を兼ね備えたデータ構造を簡単に定義できます。インデックス・属性名・getattr()によるアクセス、_make()や_asdict()による変換、_fields()や_replace()による操作など、多彩な機能を活用することで、より読みやすく保守性の高いPythonコードを書くことができます。

  1. 【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説

    はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが

  2. PythonのタプルをPostgreSQLデータベースに挿入する方法

    PostgreSQLはデフォルトでポート番号5432を使用して動作します。PythonからPostgreSQLを操作するには、psycopg2モジュールをインストールします。この記事では、「test」データベースと、fname(名)、sname(姓)、age(年齢)、gender(性別)、salary(給与)というフィールドを持つ「employee」テーブルが既に用意されているものとして解説を進めます。 1. データベースへの接続とカーソルオブジェクトの取得 まず、Pythonスクリプト内で以下のコードを実行し、データベースへの接続を確立してカーソルオブジェクトを取得します。 import