如何使用内联if语句打印输出?

7
这个词典对应着编号节点:
{0: True, 1: True, 2: True, 3: False, 4: False, 5: False, 6: True, 7: True, 8: False, 9: False}

使用两个打印语句,我想按以下方式打印已标记和未标记的节点:

  • 已标记的节点:0 1 2 6 7

  • 未标记的节点:3 4 5 8 9

我想要类似于以下内容:

print("Marked nodes: %d" key in markedDict if markedDict[key] = True)
print("Unmarked nodes: %d" key in markedDict if markedDict[key] = False)
3个回答

9
你可以使用列表推导式:
nodes = {0: True, 1: True, 2: True,
         3: False, 4: False, 5: False,
         6: True, 7: True, 8: False, 9: False}

print("Marked nodes: ", *[i for i, value in nodes.items() if value])
print("Unmarked nodes: ", *[i for i, value in nodes.items() if not value])

输出:

Marked nodes:  0 1 2 6 7
Unmarked nodes:  3 4 5 8 9

2
你可以只使用 if value 和 if not value。 - midori
也适用于Python 3.4.0。 - pp_
1
非常好!谢谢你! - pooperdooper

3

以下是另一种解决方案,适用于不支持顶部答案中使用的解包语法的Python版本。 让d成为您的字典:

>>> print('marked nodes: ' + ' '.join(str(x) for x,y in d.items() if y))
marked nodes: 0 1 2 6 7
>>> print('unmarked nodes: ' + ' '.join(str(x) for x,y in d.items() if not y))
unmarked nodes: 3 4 5 8 9

0
我们可以避免对字典进行重复迭代。
marked = []
unmarked = []
mappend = marked.append
unmappend = unmarked.append
[mappend(str(x))if y else unmappend(str(x)) for x, y in d.iteritems()]
print "Marked - %s\r\nUnmarked - %s" %(' '. join(marked), ' '. join(unmarked))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接