問題タブ [autovivification]
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 - Python のデフォルト値を使用した PERL のような自動有効化で、存在しない任意のネストからデフォルト値を返しますか?
Python で PERL のような autovivication が必要だとします。つまり、次のようになります。
これを行う主な方法がいくつかあります。
OK -- 簡単です。
ここで、キーが欠落している dict からデフォルト値を返したいとします。繰り返しますが、それを行ういくつかの方法:
- ネストされていないパスの場合、フックを使用できます
__missing__
- 欠落している可能性のあるキー パスへのアクセスをラップする try/except ブロック
- 使用します
{}.get(key, default)
(ネストされた dict では簡単に機能しません)。つまり、次のバージョンはありません。autoviv.get(['nested']['key']['no key of this value'], default)
2 つの目標は、相容れない対立のように見えます (私がこの数時間、これを解決しようとしたことに基づいています)。
質問は次のとおりです。
1) のネストされた構造を作成する Autovivifying dict が必要だとしd['arbitrary']['nested']['path']
ます。AND 2) try/except でラップせずに、存在しない任意のネストからデフォルト値を返しますか?
問題は次のとおりです。
- の呼び出しは
d['nested']['key']['no key of this value']
と同等(d['nested'])['key']['no key of this value']
です。オーバーライドは、 ALSO__getitem__
オーバーライドするオブジェクトを返さないと機能しません__getitem__
。 - そのパスの存在をテストすると、Autovivifier を作成するための両方の方法で dict エントリが作成されます。
if d['p1']['sp2']['etc.']
つまり、でテストするだけなら、そのパス全体を作成したくありませんif
。
Python で次のような dict を提供するにはどうすればよいですか。
d['p1']['p2'][etc]=val
タイプ(Autovivication)のアクセス パスを作成します。- 存在をテストする場合は、同じパスを作成しないでください。
{}.get(key, default)
try/except でラップせずにデフォルト値 ( など) を返す- dict 操作の完全なセットは必要ありません。本当に唯一
d=['nested']['key']['value']=val
でありd['nested']['key']['no key of this value']
、デフォルト値と同じです。テストd['nested']['key']['no key of this value']
で作成しないことをお勧めしますが、それを受け入れます。
?
python - defaultdict を使用した Python 単線ツリー。必要な引数の数を減らす方法は?
このGist のdefaultdict 1 行ツリーを使用しています。
[]
現在、追加するノードごとに個別に提供する必要があります。
すなわち:
私の質問は、同じ結果を達成するためのリストを提供できるように、どのように入力を平坦化できるでしょうか?
すなわち:
助けてくれてありがとう!
java - マップの一般的な自動有効化機能
ジェネリックを使用してキーを作成するにはどうすればよいですか? このコードはコンパイルさえしません:
list - 任意の長い値のリストで Python 辞書を更新する
任意の長いキーのリストから辞書の値を更新できるようにする必要があるという仕事上の問題があります。キー リストとディクショナリの両方が実行時に同じデータから生成されますが、以前にデータに含まれるキーの数はわかりません。データから取得するキーのリストは、実行時にユーザーが指定します。
OK、これは次のものから構成されるリスト情報からディクショナリの値を更新できるようにする必要があるということになります:そのキー リスト情報。
perl - %{..} ではなく keys() で Autovivification が発生するのはなぜですか?
これは私が見つけた機微ですkeys()
。
最初のスニペットで逆参照エラーが発生しない理由について、私は最も困惑しています。を使用するData::Dumper
と、最初のスニペットで$d->{cd}
、 が autovivified であることが明らかになります{}
。
なぜkeys
autovivify が必要なのですか? を読んでみperldoc
ましたが、満足のいく答えが見つかりませんでした。keys
エイリアス ($_
など) を設定しないので、perl が$d->{cd}
左辺値コンテキストにある必要があると考える必要はありませんね。(ここで説明されているように、式が左辺値コンテキストの自動有効化に含まれている必要があるかどうかは理解しています。
関連する投稿。
arrays - Perl: autovivification がハッシュに配列を作成しない
Perl スクリプトの次の部分があります。
コマンドを配列にプッシュしようとしていましたが、これをハッシュに保持することにしました。if(!defined($QUEUES[$current_queue]))$QUEUES[$current_queue]=[];
通常の for ループを使用Data::Dumper
したところ、0 から $thread_count-1 までの $QUEUE のどのキーにも何も定義されていないことがわかりました。これは教科書的な自動蘇生の使い方ではないでしょうか?私は何を間違っていますか?