1

我对以下代码行感到困惑:

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

字典理解由if-elsefor循环组成。谁能解释一下代码是如何工作的?

4

2 回答 2

2

您对... if ... else ...条件表达式感到困惑。它不是循环的一部分,它是为每个键值对生成值的表达式的一部分。

字典推导式至少包含一个循环,if右侧可选更多循环和过滤器,左侧有两个表达式。一个表达式产生一个键,另一个产生一个值。这两个表达式一起为结果字典创建了一个键值对:

{key_expression: value_expression for target in iterable}

条件表达式只是根据测试生成一个值。要么测试评估为真并选择一个值,要么该值为假而选择另一个:

true_expression if test else false_expression

只评估选择的表达式;如果结果test为假,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 or 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 回答