0Pricing
Python Academy · レッスン

namedtupleとOrderedDict

その他の便利なコレクション

「namedtupleとOrderedDict」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

便利なコレクションをさらに2つ

collectionsモジュールには、読みやすいレコード形式のタプルを作るnamedtupleと、順序に関する追加メソッドを持つ辞書であるOrderedDictが含まれています。

from collections import namedtuple, OrderedDictでインポートできます。

from collections import namedtuple, OrderedDict
print(namedtuple)
print(OrderedDict)

namedtupleの定義

namedtuple(name, fields)は、新しいタプルサブクラスを作成します。型の名前とフィールド名のリストを渡します。その結果はインスタンス化できるクラスになります。

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p)

名前によるアクセス

大きな利点は、分かりにくいインデックス番号ではなく名前でフィールドを読み取れることです。コードが大幅に読みやすくなります。

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x)
print(p.y)

タプルとしての性質

namedtupleは実際のタプルなので、インデックス指定、アンパック、反復処理もそのまま使用できます。

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p[0])
x, y = p
print(x + y)

不変だが置き換え可能

すべてのタプルと同様に、namedtupleは不変です。変更したコピーを作るには._replace()を使用します。新しいインスタンスが返されます。

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
q = p._replace(y=10)
print(p)
print(q)

辞書への変換

._asdict()はnamedtupleを、フィールド名と値を対応付ける通常の辞書に変換します。

from collections import namedtuple
Car = namedtuple('Car', ['make', 'year'])
c = Car('Toyota', 2026)
print(c._asdict())

デフォルト値

namedtupleの定義時にdefaultsを指定します。デフォルト値は右端のフィールドから適用されるため、インスタンス作成時に省略できます。

from collections import namedtuple
User = namedtuple('User', ['name', 'role'], defaults=['guest'])
print(User('Alice'))
print(User('Bob', 'admin'))

フィールドの確認

._fields属性はフィールド名を一覧表示します。イントロスペクションや汎用的なコードの構築に便利です。

from collections import namedtuple
Color = namedtuple('Color', ['r', 'g', 'b'])
print(Color._fields)

OrderedDictの基本

OrderedDictは挿入順序を記憶します。Python 3.7以降では通常のdictも順序を保持しますが、OrderedDictには他では利用できない順序操作用の追加メソッドがあります。

from collections import OrderedDict
od = OrderedDict()
od['first'] = 1
od['second'] = 2
print(od)

move_to_end

.move_to_end(key)はキーを末尾に移動します。last=Falseを指定すると先頭に移動します。これはOrderedDict固有の機能で、LRU形式のロジックに便利です。

from collections import OrderedDict
od = OrderedDict(a=1, b=2, c=3)
od.move_to_end('a')
print(list(od.keys()))
od.move_to_end('c', last=False)
print(list(od.keys()))

順序を考慮した等価性

2つのOrderedDictオブジェクトは、要素が同じ順序で並んでいる場合にのみ等しくなります。通常のdictは比較時に順序を無視します。

from collections import OrderedDict
a = OrderedDict([('x', 1), ('y', 2)])
b = OrderedDict([('y', 2), ('x', 1)])
print(a == b)
print(dict(a) == dict(b))

理解度チェック

namedtupleは不変です。変更したコピーを作成するにはどうすればよいですか。

復習:namedtupleとOrderedDict

まとめ:

  • namedtuple(name, fields)は、名前によるアクセスが可能な、読みやすく不変なレコードを作成します。
  • 変更したコピーには._replace()を、辞書への変換には._asdict()を使用します。
  • OrderedDictは挿入順序を保持し、.move_to_end()を追加します。
  • OrderedDictの等価性は、通常のdictとは異なり、順序を考慮します。
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())

よくある質問

「namedtupleとOrderedDict」レッスンは無料ですか?

はい。「namedtupleとOrderedDict」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「namedtupleとOrderedDict」で何を学びますか?

その他の便利なコレクション ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「namedtupleとOrderedDict」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Counter
  2. defaultdict
  3. deque
  4. namedtupleとOrderedDict
← Python Academyに戻る