PythonでNamed Tuple(名前付きタプル)を辞書に変換する方法
Pythonのnamedtupleクラスは、標準ライブラリのcollectionsモジュールで定義されています。このクラスは新しいタプルのサブクラスを返し、そのサブクラスを使うことで、属性アクセスでフィールドにアクセスできるうえ、インデックス操作やイテレーションにも対応したタプル風オブジェクトを作成できます。コンストラクタには型名とフィールド名のリストを引数として渡します。
Named Tupleの定義方法
例えば、学生情報を扱う「student」というnamedtupleは、次のように宣言します。
>>> from collections import namedtuple
>>> student = namedtuple("student", "name, age, marks")
オブジェクトの生成
このnamedtupleクラスのオブジェクトは、以下のように作成します。
>>> s1 = student("Raam", 21, 45)
_asdict()メソッドでOrderedDictに変換
namedtupleクラスには_asdict()メソッドが用意されており、これを呼び出すとOrderedDict(順序付き辞書)オブジェクトが返されます。
>>> d = s1._asdict()
>>> d
OrderedDict([('name', 'Raam'), ('age', 21), ('marks', 45)])
通常の辞書(dict)に変換する
通常のdictオブジェクトとして取得したい場合は、dict()関数を使用します。
>>> dct = dict(d)
>>> dct
{'name': 'Raam', 'age': 21, 'marks': 45}
まとめ
namedtupleを辞書に変換するには、まず_asdict()メソッドでOrderedDictを取得し、必要に応じてdict()関数で通常の辞書へ変換します。なお、Python 3.8以降では_asdict()の戻り値がすでに通常のdictになっているため、多くの場合は追加の変換は不要です。データをキー指定で柔軟に扱いたい場面で、この変換手法は非常に便利です。
-
Pythonでタプルの中にタプルを入れる方法(ネストされたタプルの使い方)
Pythonにおけるタプルは、丸括弧 () で囲まれた、順序を持つオブジェクトのコレクションとして定義されます。タプルの要素には任意のPythonオブジェクトを格納できるため、タプル自体を別のタプルの要素として含めることも可能です。これを「ネストされたタプル」と呼びます。タプルの中にタプルを定義する以下の例では、タプル t1 の中に、別のタプル (4, 5, 6) を要素として含めています。>>> t1 = (1, (4, 5, 6), 2, 3) >>> t1 (1, (4, 5, 6), 2, 3)インデックスで内側のタプルを取り出すこの例では、t1 の
-
Pythonで文字列を辞書(dict)に変換する方法|ast.literal_evalとjson.loadsの使い分け
Pythonでは、文字列形式で表現された辞書データを実際のdictオブジェクトに変換したい場面がよくあります。主な方法としては、標準ライブラリの ast.literal_eval() を使う方法と、json モジュールを使う方法の2つがあります。それぞれの特徴と使い方を詳しく見ていきましょう。 方法1:ast.literal_eval() を使う ast.literal_eval() は、文字列をPythonの式として安全に評価する関数です。任意のコードを実行できてしまう eval() とは異なり、リテラル構造以外は評価しないため、セキュリティ面でも安心して利用できます。 評価できるのは、文