2016-02-05 15 views
7

Słownik ten koresponduje z numerami węzłów:Jak drukować za pomocą instrukcji inline if?

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

użyciu dwóch sprawozdań drukowania, chcę wydrukować oznakowanych i nieoznakowanych węzły następująco:

  • Marked węzły: 0 1 2 6 7

  • nieoznakowanych węzłów : 3 4 5 8 9

Chcę coś podobnego do:

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

Odpowiedz

9

można użyć wyrażeń listowych:

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

wyjściowa:

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

można po prostu zrobić, jeśli wartość i jeśli nie wartość – tinySandy

+0

Działa również z Python 3.4.0. –

+1

Działa świetnie! Dziękuję Ci! – pooperdooper

3

Oto kolejny rozwiązanie, które współpracuje z wersjami Pythona, które wykonują nie obsługuje jeszcze składni rozpakowania używanej w najwyższej odpowiedzi. Niech d będzie twoim słownikiem:

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

Możemy uniknąć powtarzania iteracji w słowniku.

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)) 
Powiązane problemy