it-swarm.com.de

Python: Die Prüfung, ob ein 'Dictionary' leer ist, scheint nicht zu funktionieren

Ich versuche zu prüfen, ob ein Wörterbuch leer ist, sich aber nicht richtig verhält. Es überspringt es einfach und zeigtONLINEohne etwas anderes als die Anzeige der Nachricht. Irgendwelche Ideen warum?

 def isEmpty(self, dictionary):
   for element in dictionary:
     if element:
       return True
     return False

 def onMessage(self, socket, message):
  if self.isEmpty(self.users) == False:
     socket.send("Nobody is online, please use REGISTER command" \
                 " in order to register into the server")
  else:
     socket.send("ONLINE " + ' ' .join(self.users.keys())) 
253
Unsparing

Leere Wörterbücher werten Sie False in Python aus:

>>> dct = {}
>>> bool(dct)
False
>>> not dct
True
>>>

Ihre isEmpty-Funktion ist daher nicht erforderlich. Alles was Sie tun müssen, ist:

def onMessage(self, socket, message):
    if not self.users:
        socket.send("Nobody is online, please use REGISTER command" \
                    " in order to register into the server")
    else:
        socket.send("ONLINE " + ' ' .join(self.users.keys()))
504
iCodez

Es gibt drei Möglichkeiten, um zu überprüfen, ob Diktat leer ist. Ich bevorzuge jedoch nur den ersten Weg. Die anderen beiden Wege sind viel zu wortreich.

test_dict = {}

if not test_dict:
    print "Dict is Empty"


if not bool(test_dict):
    print "Dict is Empty"


if len(test_dict) == 0:
    print "Dict is Empty"
86
doubleo
dict = {}
print(len(dict.keys()))

wenn length gleich Null ist, bedeutet das, dass dict leer ist

Ein Wörterbuch kann automatisch in einen Booleschen Wert umgewandelt werden, der für ein leeres Wörterbuch False und für ein nicht leeres Wörterbuch True ergibt.

if myDictionary: non_empty_clause()
else: empty_clause()

Wenn dies zu idiomatisch erscheint, können Sie auch len(myDictionary) für Null oder set(myDictionary.keys()) für eine leere Menge oder einfach mit {} Auf Gleichheit prüfen.

Die Funktion isEmpty ist nicht nur unnötig, sondern Ihre Implementierung weist auch mehrere Probleme auf, die ich auf den ersten Blick erkennen kann.

  1. Die Anweisung return False Ist eine Ebene zu tief eingerückt. Es sollte sich außerhalb der for-Schleife befinden und auf derselben Ebene wie die for -Anweisung. Infolgedessen verarbeitet Ihr Code nur einen willkürlich ausgewählten Schlüssel, wenn ein Schlüssel vorhanden ist. Wenn kein Schlüssel vorhanden ist, gibt die Funktion None zurück, was in boolean False umgewandelt wird. Autsch! Alle leeren Wörterbücher werden als falsch-nagativ klassifiziert.
  2. Wenn das Wörterbuch nicht leer ist, verarbeitet der Code nur einen Schlüssel und gibt seinen in Boolean umgesetzten Wert zurück. Sie können nicht einmal davon ausgehen, dass bei jedem Aufruf derselbe Schlüssel ausgewertet wird. Es wird also Fehlalarme geben.
  3. Nehmen wir an, Sie korrigieren den Einzug der Anweisung return False Und bringen ihn aus der for -Schleife heraus. Dann erhalten Sie den Booleschen Wert ODER aller Schlüssel oder False, wenn das Wörterbuch leer ist. Trotzdem wirst du falsche Positive und falsche Negative haben. Führen Sie die Korrektur durch und prüfen Sie anhand des folgenden Wörterbuchs, ob Beweise vorliegen.

myDictionary={0:'zero', '':'Empty string', None:'None value', False:'Boolean False value', ():'Empty Tuple'}

0
Della

Python 3:

def is_empty(dict):
   if not bool(dict):
      return True
   return False

test_dict = {}
if is_empty(test_dict):
    print("1")

test_dict = {"a":123}
if not is_empty(test_dict):
    print("1")
0
Luís De Marchi

Nachfolgend finden Sie einfache Möglichkeiten, ein leeres Diktat zu überprüfen:

        a= {}

    1. if a == {}:
           print ('empty dict')
    2. if not a:
           print ('empty dict')

Obwohl Methode 1st strenger ist als wenn a = Keine, liefert Methode 1 ein korrektes Ergebnis, aber Methode 2 liefert ein falsches Ergebnis.

0
Shagun Pruthi