次のコード行と混同しています。
data = {n.attributes['xid']: float(n.content) if n.content else np.nan for n in graph.by_tag('value') }
辞書内包表記はif-else
andfor
ループで構成されています。コードの仕組みを説明できる人はいますか?
次のコード行と混同しています。
data = {n.attributes['xid']: float(n.content) if n.content else np.nan for n in graph.by_tag('value') }
辞書内包表記はif-else
andfor
ループで構成されています。コードの仕組みを説明できる人はいますか?
... if ... else ...
条件式に混乱しています。これはループの一部ではなく、各キーと値のペアの値を生成する式の一部です。
辞書内包表記は、少なくとも 1 つのループで構成され、オプションでif
右側にさらにループとフィルターを追加し、左側に2 つの式を追加します。キーを生成する 1 つの式と、値を生成する別の式。2 つの式を組み合わせると、結果の辞書のキーと値のペアが作成されます。
{key_expression: value_expression for target in iterable}
条件式は、テストに基づいて値を生成するだけです。テストが true と評価されて一方の値が選択されるか、値が false で他方が選択されます。
true_expression if test else false_expression
選択された式のみが評価されます。test
最終的に false になった場合、がfalse_expression
実行され、結果が返さtrue_expression
れます。 は完全に無視されます。
したがって、あなたが見ている辞書内包表記は次のものと同等です。
data = {}
for n in graph.by_tag('value'):
key = n.attributes['xid']
value = float(n.content) if n.content else np.nan
data[key] = value
したがって、は(truethy または not)の値に応じて、または にvalue
設定されます。float(n.content)
np.nan
n.content
翻訳は役に立ちますか?
data = {}
for n in graph.by_tag('value'):
if n.content:
data[n.attributes['xid']] = float(n.content)
else:
data[n.attributes['xid']] = np.nan