dictcomp
でelse
のステートメントを使用することはできますか?if-elseを辞書の理解
(thisを参照)を理解自体の一部としてelse
を使用することは不可能であるが、少なくともlist
とset
内包においては(this参照)conditional_expression
を使用することが可能です。
listcomp
の例はhereです。
私のコード例は次のとおりです。
converters = {"id": int}
rows = [{"id": "1", "name": "foo"}, {"id": "2", "name": "bar"}]
for row in rows:
row = {k: converters[k](v) if k in converters else k:v for k,v in row.items()}
print(row)
これは動作しません。
奇妙な部分は、それがOKであるべきにもかかわらず
row = {k: converters[k](v) if k in converters for k, v in row.items()}
は、いずれかの動作しないということです。
row = {k: converters[k](v) for k, v in row.items() if k in converters}
が動作しますが、これは私が望む結果ではありません。私が上で指摘したように、
row = {k: converters[k](v) for k, v in row.items() if k in converters else k:v}
は機能しません。
私は2つのdictcompsを使用して問題を回避できることを知っていますが、なぜこれが機能しないのかを知りたいのです。