defaultdict デフォルト値 1?
質問
私はpythonの初心者です、そして私はいくつかのコードスニペットをどこからか読みました。それは、カウントソートの実装です。
コードは以下の通りです。
from collections import defaultdict
def sort_colors(A):
ht = {} # a hash map
ht = defaultdict(lambda:0, ht) # with default value 1
for i in A:
ht[i] += 1
ret = []
for k in [0, 1, 2]:
ret.extend([k]*ht[k])
return ret
funcの最初の2行と同様に
ht = {}
ht = defaultdict(lambda:0, ht)
この初期化についてよく分からないのですが、教えていただけませんか? また、この2行を以下のように置き換えたらどうでしょうか?
ht = defaultdict(int) # default value 0
どのように解決するのですか?
簡単な答え(下記のモンタローの答えと同じです。)
defaultdict(lambda:1)
どのようにするかについての長い答え
defaultdict
の動作について
ht = {}
ht = defaultdict(lambda:0, ht)
defaultdict
とは異なり
dict
にアクセスしようとすると、通常の
dict
に存在しないキーでアクセスしようとすると
KeyError
.
defaultdict
しかし、これはエラーを発生させません:あなたのためにキーを作成します。どのような値で?の戻り値で
callable
の戻り値です。この場合、すべての新しいキーは、値
0
という値で作成されます (これは,単純な
lambda
関数
lambda:0
) の戻り値と同じになります。
int()
の戻り値でもあります。
この場合
というようにデフォルトの関数を変更しても違いはありません。
int()
.
この行をさらに細かく分解すると
ht = defaultdict(lambda:0, ht)
最初の引数は関数で、これは呼び出し可能なオブジェクトです。これは、存在しないキーに対して新しい値を作成するために呼び出される関数です。第2引数は
ht
はオプションで、新しいキーに対応するベースディクショナリを参照します。
defaultdict
が構築されるベースとなる辞書を指します。したがって、もし
ht
がいくつかのキーと値を持っていた場合、その
defaultdict
はこれらのキーとそれに対応する値も持っているはずです。これらのキーにアクセスしようとすると、古い値を取得することになります。
しかし、もしベースとなる辞書を渡さなかった場合は、全く新しい
defaultdict
が作成され、したがって、アクセスされるすべての新しいキーは呼び出し可能なものから返されるデフォルト値を取得します。
(この場合
ht
は最初は空の
dict
であるなら
ht = defaultdict(lambda:0)
,
ht = defaultdict(int)
または
ht = defaultdict(lambda:0, ht)
: それらはすべて同じ
defaultdict
.
関連
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] 文字のASCII値を取得する方法
-
[解決済み] ディクショナリーで最大値を持つキーを取得する?
-
[解決済み】defaultdictのdefaultdict?
-
[解決済み] defaultdictのネストされたdefaultdict
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Python 言語を決定するには?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?