我对以下代码行感到困惑:
data = {n.attributes['xid']: float(n.content) if n.content else np.nan for n in graph.by_tag('value') }
词典理解包括if-else
和for
循环。任何人都可以解释一下代码是如何工作的吗?
答案 0 :(得分:2)
您对... if ... else ...
conditional expression感到困惑。它不是循环的一部分,它是为每个键值对生成值的表达式的一部分。
字典理解包含至少一个循环,右侧可选择更多循环和if
过滤器,左侧有两个表达式。一个表达式产生一个键,另一个表达式产生一个值。这两个表达式一起为结果字典创建一个键值对:
{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
因此,value
要么设置为float(n.content)
,要么设置为np.nan
,具体取决于n.content
的值(truethy与否)。
答案 1 :(得分: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