2016-02-05 4 views
7

Dieses Wörterbuch entspricht mit nummerierten Knoten:Wie mit Inline-If-Anweisung drucken?

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

zwei print-Anweisungen benutzen, ich markierten und nicht markierten Knoten drucken möchten, wie folgt:

  • Markierte Knoten: 0 1 2 6 7

  • unmarkierte Knoten : 3 4 5 8 9

Ich möchte etwas in der Nähe:

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

Antwort

9

Sie Listenkomprehensionen verwenden können:

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

Ausgang:

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

können Sie nur tun, wenn Wert und wenn nicht Wert – tinySandy

+0

Funktioniert auch mit Python 3.4.0. –

+1

Funktioniert gut! Vielen Dank! – pooperdooper

3

Hier ist eine andere Lösung, die mit Versionen von Python funktioniert das tun unterstützt nicht die Entpackungssyntax, die in der oberen Antwort verwendet wird. Lassen Sie d Ihr Wörterbuch sein:

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

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