我对以下代码行感到困惑:
data = {n.attributes['xid']: float(n.content) if n.content else np.nan for n in graph.by_tag('value') }
字典理解由if-else
和for
循环组成。谁能解释一下代码是如何工作的?
我对以下代码行感到困惑:
data = {n.attributes['xid']: float(n.content) if n.content else np.nan for n in graph.by_tag('value') }
字典理解由if-else
和for
循环组成。谁能解释一下代码是如何工作的?
您对... 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.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