Python 3 で辞書を dataclass に変換したい時は、辞書のアンパック **
を使います。
次のように簡単に変換できます。
from dataclasses import dataclass
@dataclass
class Data:
foo: int
bar: int
dict1 = {'foo': 10, 'bar': 20}
data = Data(**dict1)
print(data)
# Data(foo=10, bar=20)
なお、これとは逆向きの dataclass から dict への変換は dataclasses.asdict() で可能です。
dict を NamedTuple に変換
辞書から NamedTuple の場合も同様に、アンパックを使って変換できます。
from typing import NamedTuple
class Named(NamedTuple):
first: str
second: str
dict2 = {'second': 'B', 'first': 'A'}
named = Named(**dict2)
print(named)
# Named(first='A', second='B')
またこれらだけでなく、クラスや関数に対して動的に生成したキーワード引数を渡したい時は、辞書のアンパックが大変便利です。
※ コードは Python 3.8 で動作確認済み。
コメントを投稿