問題タブ [namedtuple]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 渡された引数のサブセットのみを使用して namedtuple オブジェクトを作成する
次のアプローチを使用して、MySQL データベースから行を辞書として (SSDictCursor を使用して) プルし、いくつかの処理を行っています。
を使用するnamedtuple
には、必要なフィールドを事前に正確に把握する必要がありますが、これで問題ありません。ただし、ユーザーが単純なSELECT *
ステートメントをプログラムに入力できるようにしたいと考えています。プログラムは、結果セットの行を反復処理し、これらの異なるクラスを使用して複数のタスクを実行します。これを機能させるために、私のクラスは、カーソルから入ってくる N 個のフィールドをどうにかして調べ、namedtuple
定義によって期待される名前に対応する特定のサブセット M < N のみを取得する必要があります。
私が最初に考えたのは、各クラスに適用できる単一のデコレータを作成してみることでした。このデコレータは、クラスを調べて期待されるフィールドを確認し、適切な引数のみを新しいオブジェクトに渡します。しかし、ここ数日でデコレータについて読み始めたばかりで、まだ自信がありません。
だから私の質問は2つの部分に分かれています:
- これは、装飾されている特定のクラスに必要なフィールドを特定する単一のデコレータで行うことは可能ですか?
- 同じ機能を備えた、使いやすく、変更しやすく、理解しやすい代替手段はありますか?
各結果セットに何百万行もあるテーブルとフィールドの潜在的な順列が多すぎるため、1 つの汎用namedtuple
サブクラスを記述してそれぞれの異なるタスクに対処することはできません。クエリ時間と使用可能なメモリが制限要因であることが証明されています。
必要に応じて:
python - 名前付きタプルの値を文字列から整数に変換する
csv ファイルを列ヘッダーから一連の名前付きタプルに読み込むスクリプトを作成しています。次に、これらの名前付きタプルを使用して、特定の基準を満たすデータ行を取り出します。
入力を処理しました (以下を参照) が、別のファイルに出力する前にデータをフィルタリングする際に問題が発生しています。
私の入力ファイルの内容は次のとおりです。
そして、それらは次のように私のコードから出力されます:
Base(Locus='chr1:6484996', Total_Depth='1030', Average_Depth_sample='1030', Depth_for_17='1030') Base(Locus='chr1:6484997', Total_Depth='14', Average_Depth_sample='14', Depth_for_17='14') Base(Locus='chr1:6484998', Total_Depth='0', Average_Depth_sample='0', Depth_for_17='0')
Total_Depth が 15 を超えるレコードのみを抽出できるようにしたいと考えています。
直感的に、次の機能を試しました。
ただし、これはデータの最終行のみを出力します (上記の出力テーブルから)。問題は二重だと思います。私が知る限り、後で参照できるように名前付きタプルをどこにも保存していません。次に、数値は整数ではなく文字列形式で読み取られます。
まず、名前付きタプルをどこかに保存する必要がある場合、誰かが私を修正できますか。
次に、文字列値を整数に変換するにはどうすればよいですか? または、名前付きタプルは不変であるため、これは不可能です。
ありがとう!
以前、辞書に関して同様の質問をしましたが、代わりに名前付きタプルを使用したいと考えています。:)
python - リストする名前付きタプルの文字列
名前付きタプルの文字列をリストに変換するにはどうすればよいですか?
問題は、名前付きタプルのリストを SQLite の列に格納する必要があることです。これは (明らかに) 形式をサポートしていません。文字列に変換するだけだと思いました。ただし、私のタプルは名前付きタプルなので、文字列からリストに再度移動する方法がわかりません。
私の名前付きタプルのリストはこのようなものです^^^^ ですが、上記の 2 つではなく 6 つの引数があります。編集 - 引数はブール値、int、および文字列です。
マッピングを試みましたが、次のエラーが発生しました。
これを行うための他のより簡単な方法を受け入れます。
python - 同じ型名を持つ異なる名前付きタプルの有害な副作用?
次の関数を検討してください。
この関数は、入力のキーnamedtuple
と同じフィールド名を持つ「一時的な」クラスを生成するために呼び出します。dict
次に、値が入力されたインスタンスを返します。
typename
私の質問は、フィールド名が異なっていても、への引数namedtuple
が常に同じであるため、これに特定の落とし穴があるかどうかです。たとえば、namedtuple
これを行うことによってオーバーライドされるクラスをバックグラウンドで作成した場合、後で奇妙な動作が発生する可能性があることがわかりました。これを行うための副作用/落とし穴はありますか?
オプション情報:
私が一体何をしていて、このコードを書く必要があるのか疑問に思っているなら、私は ORM を持っていdict
ます。オブジェクトが代入で奇妙に動作するのを見たことがありますが、(クエリ コードの記述方法によっては) データベースを変更する機能がある場合とない場合があるオブジェクトを渡したくありません。すべてのクエリに対して DTO オブジェクトを維持しようとするのは面倒に思えます。また、すべてのクエリを少数の DTO セットと互換性を持たせようとするのと同様です。だから私はこれを思いついたdto.a
. これは本質的に動的なオンザフライの DTO ジェネレーターです。また、repr
デバッグ中のためのかなり優れた実装が得られます。
python - Python namedtuples を使用して行を mySQL データベースに挿入するにはどうすればよいですか?
私はnamedtuplesを使ってmySQLから行を読みました...それは素晴らしいです。同じメカニズムを使用して行を mySQL に挿入できますか。私のシステムはかなり変化しているので、プログラムを変更するたびに値/列の順序をチェックすることなく、Python の値をデータベースの列にマップする簡単な方法が必要です。
python - Python:すべての名前付きタプルを出力します
次のコードがあります。
私の質問は、すべての名前付きタプルをどのように印刷できるかです。たとえば、次のようになります。
私は結果としてこのようなものを見たいです:
何か案は?ありがとう..
python - Python3 — 動的に選択された namedtuple フィールドを置き換える
を使用してデータベース レコードをモデリングしていますcollections.namedtuple
。ときどき、ユーザーが任意のフィールドの内容を置き換えられるようにしたいと考えています。この_replace()
メソッドは、引数の一部としてその名前を指定できる限り、特定のフィールドの内容を置き換えることを許可します: somenamedtuple._replace(somefield=newcontent)
. しかし、名前自体がユーザーによって動的に提供される場合、それを行う方法を見つけることができません。
最小限の作業例を次に示します。
出力 (Ipython 1.0.0、Python 3.3.1) は次のとおりです。
このrecord._replace()
行は、'two' を 'asdf' に設定しようとしているのではなく、two
サイレントに失敗します。eval
insideを使用することを考えていまし_replace()
たが、_replace()
式を引数として受け入れません。
組み込み関数も試しましたsetattr
が、名前付きタプルでは機能しません。おそらく、不変であるためです。