Frage Wie drucke ich mit Inline-if-Anweisung?


Dieses Wörterbuch entspricht nummerierten Knoten:

{0: True, 1: True, 2: True, 3: False, 4: False, 5: False, 6: True, 7: True, 8: False, 9: False}

Mit zwei print-Anweisungen möchte ich markierte und unmarkierte Knoten wie folgt drucken:

  • Markierte Knoten: 0 1 2 6 7

  • Nicht markierte Knoten: 3 4 5 8 9

Ich möchte etwas in der Nähe von:

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

7
2018-02-05 22:47


Ursprung


Antworten:


Sie können Listenergänzungen verwenden:

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])

Ausgabe:

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

9
2018-02-05 22:51



Hier ist eine andere Lösung, die mit Versionen von Python funktioniert, die die Entpackungssyntax nicht unterstützen, die in der obersten Antwort verwendet wird. Lassen d sei dein Wörterbuch:

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

3
2018-02-05 22:56



Wir können doppelte Iteration über das Wörterbuch vermeiden.

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))

0
2018-02-06 08:08