[解決済み] ある条件を満たしたときだけ、dictに追加する
2022-10-13 14:59:48
質問
私は
urllib.urlencode
を使用して Web POST パラメータを作成していますが、いくつかの値については
None
以外の値が存在する場合にのみ追加したい値がいくつかあります。
apple = 'green'
orange = 'orange'
params = urllib.urlencode({
'apple': apple,
'orange': orange
})
これはうまくいくのですが、もし
orange
をオプションにした場合、パラメータに追加されないようにするにはどうしたらよいでしょうか?このようなものです(疑似コード)。
apple = 'green'
orange = None
params = urllib.urlencode({
'apple': apple,
if orange: 'orange': orange
})
これが十分に明確であったことを望みます、誰かこれを解決する方法を知っていますか?
どのように解決するのですか?
キーを別途追加する必要があります。
dict
:
params = {'apple': apple}
if orange is not None:
params['orange'] = orange
params = urllib.urlencode(params)
Pythonには条件付きでキーを定義する構文がありません。すでにすべてをシーケンスで持っているならば、dict内包を使うことができます。
params = urllib.urlencode({k: v for k, v in (('orange', orange), ('apple', apple)) if v is not None})
というのがありますが、これはあまり読みやすいものではありません。
Python 3.9以降を使用しているのであれば 新しい dict マージ演算子のサポート と条件式で指定します。
params = urllib.urlencode(
{'apple': apple} |
({'orange': orange} if orange is not None else {})
)
を使うこともできますが、私は可読性が損なわれると思うので、おそらくまだ別の
if
表現を使うでしょう。
params = {'apple': apple}
if orange is not None:
params |= {'orange': orange}
params = urllib.urlencode(params)
もう一つの方法として 辞書の解凍 を使用することもできますが、単一のキーの場合、より読みやすいとは言えません。
params = urllib.urlencode({
'apple': apple,
**({'orange': orange} if orange is not None else {})
})
個人的には、これは絶対に使いません。あまりにもハチャメチャで、ほとんど明示的でなく
明確
を使用するほど明確ではありません。
if
ステートメントを使用するのと同じです。のように
Pythonの禅
は述べています。
読みやすさを重視する。
関連
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] なぜdict[key]ではなく、dict.get(key)なのか?
-
[解決済み] 特定のキーだけを含むようにdictをフィルタリングしますか?
-
[解決済み] ネストされたPythonのdictをオブジェクトに変換する?
-
[解決済み] エラーです。" 'dict' オブジェクトには 'iteritems' という属性がありません "
-
[解決済み] pickleを使ってdictを保存するにはどうしたらいいですか?
-
[解決済み] dictから値のリストを取得するにはどうすればよいですか?
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複