問題タブ [defaultdict]
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 - collections.defaultdict はスレッドセーフですか?
私はPythonでスレッド化をまったく行ったことがなく、この質問を完全に見知らぬ人として尋ねました。
defaultdict
スレッドセーフかどうか疑問に思っています。説明させてください:
私は持っている
これにより、デフォルトで欠落しているキーのリストが作成されます。複数のスレッドが同時にこれを開始したとしましょう:
最後に、私はで終わるはずです['value', 'value']
。ただし、defaultdict
がスレッドセーフでない場合、チェック後および の前 にスレッド 1がスレッド 2に譲ると、インターリーブが発生し、他のスレッドがリストを作成して追加する可能性があります。if 'key' in dict
d['key'] = default_factory()
d['key']
'value'
その後、スレッド 1d['key'] = default_factory()
が再び実行されると、既存のリストと値が破棄されてスレッド 1が続行され、最終的に['key']
.
defaultdictの CPython ソース コードを調べました。ただし、ロックやミューテックスは見つかりませんでした。文書化されている限り、スレッドセーフではないと思います。
昨夜の IRC で、Python には GIL があり、概念的にはスレッドセーフであると述べた人もいました。Python ではスレッド化を行うべきではないと言う人もいます。私はかなり混乱しています。アイデア?
python - 自然な添字を使用して 3 次元の OrderedDict を作成する
次のプロパティを持つ辞書構造が必要です。
- 二重にネストされています (つまり、非常に多くの言葉で 3 次元)
- レベルごとに追加されたものの順序を記憶します
したがって、次のようにアイテムを追加すると:
次の理解の結果:
次のようになります。
新しいキーにこの構造を強制するためにa を使用しようとしたdefaultdict
ので、次のように長い方法で入力する必要はありません。
しかし、defaultdict
は上位 2 つのレベルの順序を覚えていません。動作をマージする方法がわからないので、上位 2 つのレベルは明らかにdefaultdict
動作を譲っていd
ます。希望する構造を実現するにはどうすればよいですか?
python - Python 辞書でアイテムをグループ化し、グループ内でそれらのアイテムを選び出す
これを正しく表現しているかどうかさえわかりませんが、これについて頭を悩ませています。グループ、説明、個人、および数値のデータセットがあります。一部の個人は、異なるグループに属することができます。いくつかは同じ説明を持つことができます。例は次のようになります。
私が達成しようとしているのは、グループ/説明内の各人に対して特定の割合を取得することです. まず、データをループして配列に追加します。次に、それを使用して defaultdict を作成します。
ここから私がしなければならないことは、私が混乱するところです。これが私が使用している実際の例です:
これらの数値の合計は 3.71 です。私の次のステップは、そのグループの 1 人を取り上げ、その人数をグループの合計で割ることです。上記のグループの例として PERSON C を使用すると、0.36/3.71 = 0.097 になります。これを自分のコードに組み込む方法がわかりませんが、まったく難しいことではないように思えますが、私はそれを見ていません。この後、他にもいくつかのステップがありますが、この特定のパーセンテージを取得する方法がわかれば、残りを理解できると思います。
python - タプルキーを持つ辞書内のタプル値のネストされたループ python
キーが4タプル(gene_region、species、ontology、length)であるdefaultdictがあります。
それをループするのは簡単です:
ただし、次のように、ネストされた方法で反復したいと思います。
どうすればいいですか?最初に値を収集する以外に方法はありませんか? または、次のダムダム方法を使用します。
python - defaultdict によって作成されたオブジェクトにパラメーターを渡す
新しいオブジェクトを構築するときにパラメーターを含むデフォルトの辞書が必要です。これは可能ですか、それを行うためのより良い方法はありますか?
次に myobj:
python - defaultdict constant_factory が期待どおりに動作しない
私は、自分の目的により適したアドホックdefaultdict
で喜んで使用します。でしょう。 default_factory
default_factory
[0,0]
関数を実装しましたconstant_factory
:
次に、それを使用しようとすると、defaultdict
予期しない動作が発生します(少なくとも、予期していなかった動作です)。
次に例を示します。
代わりに私は取得したい:defaultdict(<method-wrapper 'next' of itertools.repeat object at 0x000000000355FC50>, {0: [1, 0], 1: [1, 0], 2: [1, 0], 3: [1, 0], 4: [1, 0], 5: [1, 0], 6: [1, 0], 7: [1, 0], 8: [1, 0], 9: [1, 0]})
key に対応するリストの最初のスロットの値をインクリメントするたびに、最初のスロットのi
すべての値がインクリメントされるようです。
私はdefaultdictとメソッドラッパーを使用するのにかなり慣れていないので、Pythonが完全にうまく機能していると信じているので、誰かが私が間違っていることを説明できますか?
data-structures - 未定義のインデックスのデフォルト値を持つ最速のデータ構造?
インデックスにアクセスすると値が返される 2 次元配列を作成しようとしています。ただし、未定義のインデックスにアクセスすると、コールバックが呼び出され、インデックスにその値が入力されてから、値が返されます。
配列にも負のインデックスがありますが、4 つの配列 (0,0 付近の象限ごとに 1 つ) を使用することでこれを克服できます。