ネストされたリストデータを処理するためにattrsとcattrsを使用するためのガイド
1。attrsはじめに導入され、ネストされたデータチャレンジ
attrsは、ボイラープレートコードのないデータクラスを定義するPythonライブラリです。 Decorator @Defineを介してクラスの作成を大幅に簡素化し、__init__、__Repr__、__eq__などのメソッドを自動的に生成します。これにより、ATTRSは構造化されたデータを処理するのに理想的な選択肢になります。
ただし、ATTRSクラスのネストされたリストを含むなど、データ構造が複雑になると、辞書リストなどの生データからこれらのオブジェクトを直接構築することは困難な場合があります。一般的なシナリオは、複数の辞書を持つ辞書があることです。それぞれがAttrsクラスの独立したインスタンスに変換する必要があります。
次の元のデータ構造を検討してください。
data = { 「キャラクター」:[ {"first_name": "duffy"、 "last_name": "duck"}、 {"first_name": "bugs"、 "last_name": "bunny"}、 #...その他の文字] }
次のattrsクラス構造に変換したい:
インポートリストの入力から attrsインポートから定義します @define(kw_only = true) クラスキャラクター: first_name:str last_name:str @定義する クラスルーニートン: 文字:リスト[文字]
データ['文字']をLooneytoonsコンストラクターに直接渡すことは、内部リスト要素の変換を自動的に完了しません。
2。一般的な誤解:コンバーターパラメーターの乱用
ATTRS.FIELDを使用してフィールドを定義する場合、コンバーターパラメーターを使用して、値を割り当てるときに入力値を変換します。一般的な誤解は、フィールドタイプがリスト[文字]である場合、次のようにコンバーターを文字に直接設定することです。
#エラー使用例@define クラスルーニートン: 文字:list [character] = field(factory = list、converter = character)
このプラクティスは、TypeErrorを引き起こす可能性があります。文字.__ init __()は1つの位置的な引数を取りますが、2つまたは同様のエラーが与えられました。
原因分析:コンバーターパラメーターは、フィールドの単一の入力値を受信し、ターゲットタイプに変換する予定です。文字フィールドがリストに割り当てられている場合(たとえば、[{'first_name': 'duffy'、...}、{'first_name': 'bugs'、...}])、converter =キャラクター=キャラクター=文字クラスのコンストラクターにパラメーターとして渡そうとします。ただし、文字クラスは、リストではなく、first_name = 'duffy'、last_name = 'duck'などのキーワードパラメーターを期待しています。したがって、この直接変換方法は機能しません。
3.解決策:構造化された変換のためにCATTRを導入します
この複雑なネストされたデータ変換を優雅に処理するために、CATTRSライブラリはATTRSへの優れた追加です。 CATTRSは、任意のPythonオブジェクト(辞書やリストを含む)をATTRSクラスインスタンスに構成し、ATTRSクラスインスタンスを元のPythonタイプに戻すために特別に使用されます。タイプのプロンプトをインテリジェントに解析し、データ変換を再帰的に実行できます。
CATTRを使用する正しい方法は、ATTRSクラスを定義し、正しいタイププロンプトのみを指定し、コンバーターパラメーターを使用してリスト要素の変換を処理しないことです。 CATTRは、タイププロンプトに基づいて、ネストされた構造の変換ロジックを自動的に処理します。
ステップ1:attrsクラスを定義します
まず、ATTRSクラスの定義が正しいことを確認してください。タイププロンプトと必要なデフォルト値(Factory = listなど)のみを含みます。
インポートリストの入力から ATTRS IMPORT DEFINE、フィールドから @define(kw_only = true) クラスキャラクター: first_name:str last_name:str @定義する クラスルーニートン: #タイププロンプトを定義する必要があります。Cattrsはこのプロンプトに従って文字を構成します。
Looneytoonsインスタンスを作成するときに文字パラメーターが提供されていない場合、フィールド(Factory = list)がデフォルトの空のリストを提供するだけであることに注意してください。元の辞書データからキャラクターインスタンスへの変換プロセスには参加しません。
ステップ2:cattrs.structureを使用して変換します
次に、CATTRをインポートし、構造関数を使用して元の辞書データをLooneytoonsインスタンスに変換します。
CATTRSインポート構造から #rawデータデータ= { 「キャラクター」:[ {"first_name": "duffy"、 "last_name": "duck"}、 {"first_name": "bugs"、 "last_name": "bunny"}、 {"first_name": "sylvester"、 "last_name": "pussycat"}、 {"first_name": "elmar"、 "last_name": "fudd"}、 {"first_name": "tweety"、 "last_name": "bird"}、 {"first_name": "sam"、 "last_name": "yosemite"}、 {"first_name": "wile E."、 "last_name": "coyote"}、 {"first_name": "road"、 "last_name": "runner"}、 ] } #cattrs.structureを使用してlooney_toons_instance = structure(data、looneytoons)を変換する #検証結果print(looney_toons_instance) print(looney_toons_instance.characters [0]) print(type(looney_toons_instance.characters [0]))
完全なサンプルコード:
インポートリストの入力から ATTRS IMPORT DEFINE、フィールドから CATTRSインポート構造から #rawデータデータ= { 「キャラクター」:[ {"first_name": "duffy"、 "last_name": "duck"}、 {"first_name": "bugs"、 "last_name": "bunny"}、 {"first_name": "sylvester"、 "last_name": "pussycat"}、 {"first_name": "elmar"、 "last_name": "fudd"}、 {"first_name": "tweety"、 "last_name": "bird"}、 {"first_name": "sam"、 "last_name": "yosemite"}、 {"first_name": "wile E."、 "last_name": "coyote"}、 {"first_name": "road"、 "last_name": "runner"}、 ] } @define(kw_only = true) クラスキャラクター: first_name:str last_name:str @定義する クラスルーニートン: 文字:リスト[文字] = field(factory = list) #cattrs.structureを使用して、生の辞書データをlooneytoonsインスタンスに変換しますlooney_toons_instance = structure(data、looneytoons) #結果を印刷して印刷を確認します( "変換されたルーニートンインスタンス:") print(looney_toons_instance) print( "\ nfirstロールオブジェクト:") print(looney_toons_instance.characters [0]) print( "\ n最初の役割オブジェクトのタイプ:") print(type(looney_toons_instance.characters [0])) assert isinstance(looney_toons_instance、looneytoons) assert isinstance(looney_toons_instance.characters、list) loone_toons_instance.charactersのcのすべて(c、文字)をすべてassert assert loone_toons_instance.characters [0] .first_name == "duffy"
上記のコードを実行すると、データ辞書が正常にルーニートゥオンインスタンスに変換され、文字フィールドには一連の文字オブジェクトが含まれていることがわかります。
4。予防策と要約
- CATTRSのパワー: CATTRSは、リスト、辞書、オプションタイプなどを含むATTRSクラスのタイププロンプトを分析することにより、ネストされた構造やさまざまなタイプを自動的に処理できます。これにより、変換ロジックを手動で書き込む努力が大幅に削減されます。
- エラーコンバーターの使用は避けてください:リスト[SomeAttrsclass]などのタイプの場合、attrs.fieldのコンバーターパラメーターでSomeattrsclassを直接指定しようとしないでください。コンバーターは、コレクション内の各要素を変換するのではなく、単一の値をフィールドタイプに変換するのに適しています。
- タイププロンプトの重要性: CATTRSは、正確なタイププロンプトに大きく依存しています。 CATTRSが変換を正しく理解して実行できるように、ATTRSクラスの定義で正しいタイププロンプト(リスト[文字]など)が使用されていることを確認してください。
- シンプルさと読みやすさ: CATTRSを使用すると、ATTRSクラスの定義はより簡潔になり、データ構造自体に焦点を当て、データ変換の複雑さはCATTRによって優雅に処理されます。
このチュートリアルのガイダンスに従うことにより、ATTRとCATTRを効率的かつ優雅に使用して複雑なネストされたデータ構造を処理できるようになり、堅牢で維持できるPythonアプリケーションを構築できます。
以上がネストされたリストデータを処理するためにattrsとcattrsを使用するためのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Pyodbcのインストール:Pipinstallpyodbcコマンドを使用してライブラリをインストールします。 2.接続sqlserver:pyodbc.connect()メソッドを介して、ドライバー、サーバー、データベース、uid/pwdまたはtrusted_connectionを含む接続文字列を使用し、それぞれSQL認証またはWindows認証をサポートします。 3.インストールされているドライバーを確認します:pyodbc.drivers()を実行し、「sqlserver」を含むドライバー名をフィルタリングして、「sqlserverのodbcdriver17」などの正しいドライバー名が使用されるようにします。 4.接続文字列の重要なパラメーター

httpx.asyncclientを使用して、非同期httpリクエストを効率的に開始します。 1.基本的なGETリクエストは、asyncwithを介してクライアントを管理し、awaitclient.getを使用して非ブロッキングリクエストを開始します。 2。asyncio.gatherを組み合わせてasyncio.gatherを組み合わせると、パフォーマンスが大幅に向上する可能性があり、合計時間は最も遅いリクエストに等しくなります。 3.カスタムヘッダー、認証、base_url、タイムアウト設定をサポートします。 4。投稿リクエストを送信してJSONデータを伝達できます。 5.同期非同期コードの混合を避けるために注意してください。プロキシサポートは、クローラーやAPI集約、その他のシナリオに適したバックエンド互換性に注意を払う必要があります。

Pythoncanbeoptimizedformemory-boundoperationsは、ヘッドゲネレーター、EfficientDataStructures、およびManagingObjectlifetimes.first、Usegeneratoratoratoratoratoratoraturatussを使用していることを確認してください

この記事の目的は、Sqlalchemyの初心者がCreate_Engineを使用したときに遭遇した「removedin20warning」警告を解決することを支援することを支援することを支援することを支援することを目的としています。この記事では、この警告の原因を詳細に説明し、特定の手順とコード例を提供して、警告と接続の問題を排除し、データベースをスムーズにクエリして操作できるようにします。

shutil.rmtree()は、ディレクトリツリー全体を再帰的に削除するPythonの関数です。指定されたフォルダーとすべてのコンテンツを削除できます。 1.基本的な使用法:shutil.rmtree(PATH)を使用してディレクトリを削除すると、FilenotFounderror、PermissionError、その他の例外を処理する必要があります。 2。実用的なアプリケーション:一時的なデータやキャッシュディレクトリなど、サブディレクトリとファイルを1回クリックして含むフォルダーをクリアできます。 3。注:削除操作は復元されません。 FilenotFounderrorは、パスが存在しない場合に投げられます。許可またはファイル職業のために失敗する可能性があります。 4.オプションのパラメーター:INGRORE_ERRORS = trueでエラーを無視できます

対応するデータベースドライバーをインストールします。 2。CONNECT()を使用してデータベースに接続します。 3.カーソルオブジェクトを作成します。 4。Execute()またはexecuteMany()を使用してSQLを実行し、パラメーター化されたクエリを使用して噴射を防ぎます。 5。Fetchall()などを使用して結果を得る。 6。COMMING()は、変更後に必要です。 7.最後に、接続を閉じるか、コンテキストマネージャーを使用して自動的に処理します。完全なプロセスにより、SQL操作が安全で効率的であることが保証されます。

Pythonは、ETLプロセスを実装するための効率的なツールです。 1。データ抽出:データベース、API、ファイル、およびその他のソースからデータを抽出できます。Pandas、Sqlalchemy、Requests、その他のライブラリを介して。 2。データ変換:パンダを使用して、クリーニング、タイプ変換、関連性、集約、その他の操作を使用して、データの品質を確保し、パフォーマンスを最適化します。 3。データの読み込み:PandasのTO_SQLメソッドまたはクラウドプラットフォームSDKを使用して、ターゲットシステムにデータを書き込み、書き込み方法とバッチ処理に注意してください。 4。ツールの推奨事項:気流、ダグスター、長官は、ログアラームと仮想環境を組み合わせて、安定性と保守性を向上させるために、プロセスのスケジューリングと管理に使用されます。

psycopg2.pool.simpleconnectionPoolを使用して、データベース接続を効果的に管理し、頻繁な接続の作成と破壊によって引き起こされるパフォーマンスオーバーヘッドを回避します。 1.接続プールを作成するときは、接続プールが正常に初期化されていることを確認するために、接続パラメーターとデータベース接続パラメーターの最小数と最大数を指定します。 2。getConn()を介して接続を取得し、putconn()を使用して、データベース操作を実行した後に接続をプールに戻します。絶えずconn.close()を呼び出すことは禁止されています。 3. SimpleConnectionPoolはスレッドセーフであり、マルチスレッド環境に適しています。 4.コンテキストマネージャーと組み合わせてコンテキストマネージャーを実装して、例外が記載されているときに接続を正しく返すことができることを確認することをお勧めします。
