Pythonのcollections.defaultdict()注意事項

免責事項:著者は限られている、ブログ必然的に欠陥がたくさんあっても、重大なミス、私はあなたが修正したいと考えています。最大の目標を書くことは、学習関心と広がりを払っていない交換することもありますが。行く、とあなたがお互いを奨励するための長い道のり。https://blog.csdn.net/yexiaohhjk/article/details/88775624

辞書との違い

実際にdefaultdict説明は、データ型容器モジュール、本質的に辞書(辞書)が、Pythonは自動的にキーの初期値が割り当てられていることです。
なぜこのようなコンテナを定義したいですか?
Pythonで辞書辞書はキーを介してアクセスされるためのキーが存在しない場合、それはKeyError例外"例外につながります。これを回避するためには、辞書のデフォルト値を提供するために、クラスのコレクションにdefaultdict()メソッドを使用することが可能です。

たとえば、周波数を計算します:

wordlist = ['a','b','b','c','e','e','e']
frequencies = {}
for word in wordlist:
    frequencies[word] += 1

辞書は以下の方法を使用して解決することができる前に、インデックスが初期化されなければならないので、PythonはKeyError例外例外がスローされます。

wordlist = ['a','b','b','c','e','e','e']
frequencies = {}
for word in wordlist:
    try:
        frequencies[word] += 1
    except Exception:
        frequencies[word] = 1
print('word:',frequencies)
wordlist = ['a','b','b','c','e','e','e']
for word in wordlist:
    if word in frequencies:
        frequencies[word] += 1
    else:
        frequencies[word] = 1

collections.defaultdict使用

collections.defaultdictは、簡単にこの問題を解決することができます。

from collections import defaultdict
wordlist = ['a','b','b','c','e','e','e']
frequencies = defaultdict(int)
for word in wordlist:
    frequencies[word] += 1

collections.defaultdictは、初期化するためのパラメータとしての機能を受け入れることができます。私たちは、0に初期化された周波数[単語]にしたい、あなたが使用することができますint()defaultdictするパラメータとして、組み込み関数を、私たちは、引数なしのint型()、INT()と呼ばれるには0の値を返します。同時に、あなたも使用することができます組み込み関数のpythonの他の種類list()のパラメータとして、などが挙げられます。
例えば:

import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
# defaultdict
d = collections.defaultdict(list)
for k, v in s:
    d[k].append(v)
# Use dict and setdefault   
g = {}
for k, v in s:
    g.setdefault(k, []).append(v)

ここでsetdefault()あなたはまた、デフォルトの初期化のdict型の役割を達成することができます:
キーが辞書に存在しない場合、それはキーの値を追加し、キーが辞書に存在する場合、デフォルトは、キーのデフォルト値に設定され、元のキーを読み出します対応する値は、デフォルト値は、既存の債券で覆われていません。

dict.setdefault(key, default=None)

setdefault()より多くの使用法は見ることができますブログを

おすすめ

転載: blog.csdn.net/yexiaohhjk/article/details/88775624