在python中,字典理解中的“if-else和for”是如何工作的

时间:2014-09-23 07:11:40

标签: python python-2.7 dictionary-comprehension

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

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

词典理解包括if-elsefor循环。任何人都可以解释一下代码是如何工作的吗?

2 个答案:

答案 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