2017-05-05 3 views
-1

3.6 PythonDruck Wörterbuch minus zwei Elemente

Alle Debug-Ausgabe ist von PyCharm 2017.01.02

Ich habe ein Programm, das in diesem Teil des Codes wird:

if len(errdict) == 21: 
    for k, v in errdict.items(): 
     if k == 'packets output' or 'bytes': 
      continue 
     print(k, v) 
    print() 

Die Werte von k: und errdict {} zu der Zeit der Ausführung sind wie folgt:

k={str}'input errors' 

__len__ = {int} 21 
'CRC' (73390624) = {int} 0 
'babbles' (73390464) = {int} 0 
'bytes' (73390496) = {int} 0 
'collisions' (73455360) = {int} 0 
'deferred' (73455440) = {int} 0 
'frame' (73390592) = {int} 0 
'ignored' (73390688) = {int} 0 
'input errors' (73455280) = {int} 0 
'input packets with dribble condition detected' (63021088) = {int} 0 
'interface resets' (73451808) = {int} 0 
'late collision' (73455400) = {int} 0 
'lost carrier' (73455520) = {int} 0 
'no carrier' (73455480) = {int} 0 
'output buffer failures' (73451856) = {int} 0 
'output buffers swapped out' (73055328) = {int} 0 
'output errors' (73455120) = {int} 0 
'overrun' (73390112) = {int} 0 
'packets output' (73455320) = {int} 0 
'underruns' (73455080) = {int} 0 
'unknown protocol drops' (73451904) = {int} 0 
'watchdog' (73455160) = {int} 0 

Wenn ich diese beiden Linien zu entfernen :

 if k == 'packets output' or 'bytes': 
      continue 

es druckt korrekt alle 21 key \ value-Paare des Wörterbuchs aus. Ich möchte, dass alle Wörterbücher AUSGENOMMEN die zwei Schlüssel/Wert-Paare drucken, die "Pakete ausgeben" oder "Bytes" als Schlüssel haben.

Mit diesen beiden Zeilen wird jedes Schlüssel/Wert-Paar übersprungen und nichts gedruckt. Ich verstehe einfach nicht warum. 'Eingabefehler' stimmt nicht mit meiner Bedingung überein, daher sollte der Fortfahren übersprungen werden, und es sollte gedruckt werden, usw. in der Zeile bis auf die zwei Schlüssel, die übereinstimmen und sie sollten übersprungen werden.

Was fehlt mir?

Vielen Dank.

+1

'. .. oder k == 'Bytes'' –

+1

Versuchen Sie: 'Wenn k ==' Pakete ausgeben 'oder k ==' Bytes ':' –

+0

An Nick A, Maurice Meyer und wegrata - Danke. Das habe ich vermisst. Ich habe gerade mein Programm erneut mit dem Fix ausgeführt und es verhält sich korrekt. – MarkS

Antwort

7
if k == 'packets output' or 'bytes' 

Dies wird immer bewerten, um true als 'bytes' ein truthy Wert ist, müssen Sie k sowohl vergleichen:

if k == 'packets output' or k == 'bytes' 

Oder mehr pythonically:

if k in ['packets output', 'bytes'] 
+0

Noch besser wäre es, einen 'set' zu verwenden, wenn OP viele' k's oder Mitgliedschaften in einer größeren Gruppe von Werten testet. – blacksite

0
if len(errdict) == 21: 
    for k, v in errdict.items(): 
     if k == 'packets output' or k == 'bytes': 
      continue 
     print(k, v) 
    print() 
+1

Es würde helfen, wenn Sie tatsächlich erklärten, warum Ihre Antwort das Problem des OP löst. – kdopen

Verwandte Themen