1

次のコード行と混同しています。

data = {n.attributes['xid']: float(n.content) if n.content else np.nan for n in graph.by_tag('value') }

辞書内包表記はif-elseandforループで構成されています。コードの仕組みを説明できる人はいますか?

4

2 に答える 2

2

... 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.nann.content

于 2014-09-23T07:14:00.527 に答える
0

翻訳は役に立ちますか?

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
于 2014-09-23T07:15:07.250 に答える