問題タブ [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.

0 投票する
2 に答える
1258 参照

python - defaultdict から情報を抽出する

number の平均位置の計算を含む defaultdict があります ( Euler problem )

この情報を0から2まで手動で行うのではなく、単純な文字列に取得しようとしています。私が探している最終結果は次のようなものです

多くの if-else および for-loop を使用せずにそれらを抽出する良い方法がわかりません。

Pythonでこれを行う簡単で良い方法はありますか?

0 投票する
1 に答える
14222 参照

python - 値ごとに複数のキーを持つ 2D ディクショナリを作成して検索する

値ごとに複数のキーを持つ 2D 辞書を作成したいと考えています。

を使用して2D辞書を作成する方法を知っていますdefaultdict:

そして、通常の辞書を使用すると、次のような複数のキーで作成できることを知っています。

しかし、キーのタプルによるルックアップのようなことをしたい:

辞書の最初の次元では、値ごとに最大 25 個のキーが必要です。これを行う方法はありdefaultdictますか?

辞書でそれを行う方法があったとしても、これは単純な多次元ルックアップテーブルを作成する合理的な方法ですか?

0 投票する
3 に答える
6311 参照

python - `defaultdict` を通常の `dict` として公開する

defaultdict(set)非常に大きなデータ構造に内部マッピングを設定するために使用しています。データが取り込まれた後、構造全体 (マッピングを含む) がクライアント コードに公開されます。その時点で、誰もマッピングを変更したくありません。

そして、誰も意図的にそうしません。しかし、クライアント コードが存在しない要素を誤って参照する場合があります。その時点で、通常の辞書は を発生させますKeyErrorが、マッピングはdefaultdictであるため、そのキーで新しい要素 (空のセット) を作成するだけです。すべてが静かに行われるため、これを把握するのは非常に困難です。しかし、これが起こらないようにする必要があります (セマンティクスは実際には壊れませんが、マッピングは巨大なサイズに成長します)。

私は何をすべきか?これらの選択肢が表示されます:

  1. マッピングでディクショナリ ルックアップが実行される現在および将来のクライアント コード内のすべてのインスタンスを検索し、mapping.get(k, {})代わりに変換します。これはただひどいです。

  2. defaultdictデータ構造が完全に初期化された後、それを に変換して「フリーズ」しdictます。(実際には凍結されていないことはわかっていますが、クライアント コードが実際にはmapping[k] = v.

  3. インターフェイスにラップdefaultdictdictます。それを行うエレガントな方法は何ですか?残念ながら、パフォーマンスへの影響は大きいかもしれません (このルックアップはタイトなループで頻繁に使用されます)。

  4. defaultdictすべての機能を「シャットダウン」するメソッドをサブクラス化して追加しdefaultdict、通常の のように動作させますdict。上記の 3 の変形ですが、それより速いかどうかはわかりません。そして、実装の詳細に頼らずに実行できるかどうかはわかりません。

  5. データ構造でregulardictを使用し、そこにあるすべてのコードを書き直して、要素が辞書にあるかどうかを最初に確認し、そうでない場合は追加します。良くない。

0 投票する
1 に答える
88 参照

python - 階層辞書での Python のキー検索を最適化する

巨大な辞書をロードしようとすると非常に遅くなるため、コードを最適化しようとしています。辞書でキーを検索するためだと思います。私はpythonについて読んでいてdefaultdict、それは良い改善かもしれないと思いますが、ここでは実装できません。ご覧のとおり、階層的な辞書構造です。ヒントをいただければ幸いです。

遺伝子とタンパク質の定義は次のとおりです。

0 投票する
2 に答える
387 参照

python - タブ区切りファイルからの defaultdict と mongoDB のインポートが遅い。誰でも私のボトルネックを見つけることができますか?

そのため、ログ ファイルから約 8,000 万ページ ビューをインポートしようとしています。それらをセッションとしてデータベースに入れようとしています。つまり、20分間隔で区切られたページビューのグループです。

最終的に、私のユーザーデータベースでは、各ユーザーに次のような辞書オブジェクトのリストを持たせたいと思います:

かなり単純なはずです。だから私はこのスクリプトを書きました:

1行あたり約0.002秒= 8000万ページビューのファイルで44時間です。

これには、2TB 7200rpm seagate HDD、32 GB の RAM、および 3.4Ghz デュアルコア i3 プロセッサが搭載されています。

今回は合理的に聞こえるでしょうか、それとも私は恐ろしい間違いを犯していますか?


編集: 約 90,000 人以上のユーザー、つまり defaultdict のキーを調べています。


EDIT2: これは、はるかに小さい 106 MB ファイルの cProfile 出力です。テスト目的で、実際の mongoDB の保存をコメントアウトしました: http://pastebin.com/4XGtvYWD


EDIT3: これは cProfile の棒グラフ分析です: http://i.imgur.com/K6pu6xx.png

0 投票する
1 に答える
2827 参照

python-2.7 - defaultdictオブジェクトから値にアクセスする

キーごとに複数の値を持つdefaultdictがあります。各キーの平均値を計算したい。各キーに関連付けられている値にアクセスする方法がわかりません。誰か助けてもらえますか?

0 投票する
1 に答える
65 参照

python - 辞書の内容を独立変数に割り当てる

キーをリスト名として、値をリスト要素として、defaultdict を独立したリストに分割するにはどうすればよいですか。

例えば:

入手方法:

0 投票する
2 に答える
1846 参照

python - defaultdictのキーに従って値を累積する方法

defaultdict(list)がある場合

......どのように私がそれを同様のdefaultdict(list)に変換するか、その値は同じキーを持つ最初のdictの値の累積ですが、1より大きくなることはありません

私は今のところ次のコードしか持っていません、それは完全に正しくありません:-(

0 投票する
3 に答える
254 参照

python - 同一キーによる大きな辞書の結合

次のようなPython辞書を含む約10個の巨大なファイルがあります。

基本的にそれらはすべて辞書の辞書です。各ファイルのサイズは約 1 GB です (上記はデータの一例です)。とにかく、私がやりたいことは、10 個の辞書を結合することです。

小さなファイルで次のコードを試してみましたが、正常に動作します。

ただし、1 GB のファイルでそれを試みると、d1 と d2 および最終的な辞書をメモリに保持することで、すぐにメモリ不足になります。

私にはいくつかのアイデアがあります:

  1. セグメント化された辞書からキーをロードしてそれらを比較し、複数の辞書で同じものが見つかった場合は値を結合する方法はありますか?
  2. 辞書を 1 つの巨大なファイルにマージする代わりに (これはおそらく将来メモリの頭痛の種になるでしょう)、データをマージした後に 1 つのキーのすべての値を含む多くの個別のファイルを作成するにはどうすればよいでしょうか? たとえば、上記のデータの場合、次のようになります。

    /li>

私は生物学者としてのプログラミング経験があまりありません (上記のデータはバイオインフォマティクスの問題を表していると推測したかもしれません)。

0 投票する
1 に答える
6197 参照

python - 長さ2のリストを持つpythoncollections.defaultdict

キーに2つの値があり、プログラム中に更新される状況があります。もっと具体的には、空の辞書d = {}から始めて、次のようなことをしたいと思います。 d[a][0] += 1またはd[a][1] += 1、プログラムの実行中にも検出されるfloat型です効果を上げるために何かを行うことはできますかd = defaultdict(list([0,0]))(これによりエラーが発生します)、辞書のデフォルト値を2つの要素のリストにします。どうすればよいですか?