[解決済み] Python辞書のリストへの追加 [duplicate]
2022-07-24 10:21:20
質問
このコードにもっとエレガントな書き方はないのでしょうか?
私がやっていること 私はキーと日付を持っています。キーにはいくつもの日付が割り当てられるので、私はこれを表すために日付のリストの辞書を作成しています。以下のコードはうまく動作しますが、私はよりエレガントでPythonicな方法を望んでいました。
dates_dict = dict()
for key, date in cur:
if key in dates_dict:
dates_dict[key].append(date)
else:
dates_dict[key] = [date]
下記がうまくいくと思っていたのですが、NoneType has no attribute appendというエラーが出続けています。
dates_dict = dict()
for key, date in cur:
dates_dict[key] = dates_dict.get(key, []).append(date)
ということが関係しているのでしょう。
print([].append(1))
None
が、なぜ?
どのように解決するのですか?
list.append
戻る
None
に代入しているため、インプレース操作で
dates_dict[key]
. そのため、次に
dates_dict.get(key, []).append
を実行すると、実際には
None.append
. それが失敗する理由です。代わりに、単純に
dates_dict.setdefault(key, []).append(date)
しかし
collections.defaultdict
をこの目的だけに使用します。次のようなことができます。
from collections import defaultdict
dates_dict = defaultdict(list)
for key, date in cur:
dates_dict[key].append(date)
これは新しいリストオブジェクトを作成します。
key
が辞書にない場合、新しいリストオブジェクトを作成します。
注意してください。
を使用するため
defaultdict
はキーが辞書にない場合、新しいリストを作成するので、意図しない副作用が発生します。たとえば、単にそこにないキーの値を取得したい場合、新しいリストを作成してそれを返します。
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] pipがvirtualenvの代わりにグローバルなsite-packagesにインストールする。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] Python regex find all overlapping matches?