Ich versuche zu überprüfen, ob ein Wörterbuch leer ist, aber es verhält sich nicht richtig. Es überspringt es einfach und zeigt es an ONLINE ohne 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()))
Um zu prüfen, ob self.users ist nicht leer, tun Sie es einfach if self.users.
– BrenBarn
20. April 2014 um 1:31 Uhr
Dein isEmpty kehrt tatsächlich zurück True wenn der erste aus dem Wörterbuch gelieferte Schlüssel wahr ist und zurückkehrt False Andernfalls. Wenn das Wörterbuch leer ist, kehrt es zurück None was nicht ist == False.
– Hyperboreus
20. April 2014 um 2:08 Uhr
Ihre if-Anweisung ist rückwärts.
– Verrückter Physiker
21. April 2015 um 3:55 Uhr
Achten Sie auf falsche Schlüssel stackoverflow.com/a/17347421/1379762
– Wajih
6. Februar 2016 um 19:20 Uhr
Mögliches Duplikat von Python: Effiziente Methode, um zu überprüfen, ob das Wörterbuch leer ist oder nicht
Also, Ihr isEmpty Funktion unnötig. 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()))
@Wajih Ihr Link ist irrelevant: bool({False: False})wertet immer noch zu True. Der von Ihnen angegebene Link entspricht anyMethode, die von Schlüsseln abhängt.
– Ulysse BN
17. Februar 2017 um 20:38 Uhr
@ Wajih was bedeutet das?
– Charly Parker
12. September 2017 um 18:37 Uhr
Ich denke, “nicht diktieren” ist nicht explizit
– ich bin Batman
9. Januar 2019 um 13:03 Uhr
einverstanden, ich habe Lust, die booleschen Werte und zu verwenden not <dict> ist auch nicht so klar
– kryanbhu
28. Mai 2019 um 2:07 Uhr
“Ihre isEmpty-Funktion ist unnötig” Es macht den Code leichter verständlich.
– GG.
23. März 2021 um 21:21 Uhr
Hier sind drei Möglichkeiten, wie Sie überprüfen können, ob dict leer ist. Ich ziehe es jedoch vor, nur den ersten Weg zu verwenden. 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"
Seufz … jeder mag es, “pythonisch” zu sein und versucht, die wenigsten Zeichen zu tippen. Erstens ist ein weiteres Kriterium die Lesbarkeit. Zweitens ist der erste Test in der obigen Antwort nicht nur wahr, wenn das Diktat existiert und leer ist, sondern auch, wenn test_dict None ist. Verwenden Sie diesen Test also nur, wenn Sie wissen, dass das dict-Objekt existiert (oder wenn der Unterschied keine Rolle spielt). Der zweite Weg hat auch dieses Verhalten. Nur der dritte Weg bellt, wenn test_dict None ist.
–Andreas Maier
12. Dezember 2016 um 19:37 Uhr
@AndreasMaier Genau mein Gefühl auch. Außerdem ist Python dynamisch typisiert. Innerhalb einer Funktion ist es üblich zu überprüfen “wenn x ein nicht leeres Wörterbuch ist, dann tue dies; wenn x ein nicht leeres numpy-Array ist, dann tue das”. Dann schlägt der erste Code fehl if x wenn x ein numpy-Array ist
– jf328
15. Dezember 2016 um 8:36 Uhr
@Wajih Ihr Link ist hier immer noch irrelevant … Sehen Sie warum
– Ulysse BN
17. Februar 2017 um 20:44 Uhr
Ich stimme dem nicht zu, obwohl es technisch korrekt ist, da ich Bedenken habe, mit denen ich teile. @Andreas Maier
– Wahnsinn
17. Dezember 2018 um 23:36 Uhr
Achilles Ram Nakirekanti
d = {}
print(len(d.keys()))
Wenn die Länge Null ist, bedeutet dies, dass das Diktat leer ist.
Dieses Code-Snippet kann zwar die Frage lösen, inklusive Erklärung hilft wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für zukünftige Leser beantworten und diese Personen die Gründe für Ihren Codevorschlag möglicherweise nicht kennen.
– Dimasan
16. Dezember 2016 um 11:43 Uhr
len(dict.keys()) ist äquivalent zu len(dict)
– pdpAxis
4. Juni 2020 um 18:45 Uhr
@pdpAxis In dem Wert, den es gibt, obwohl ich auf die Implementierung wette dict.__len__ ist wohl etwas schneller. 🙂
– Mateen Ulhaq
11. Juni 2020 um 2:21 Uhr
Schagun Pruthi
Einfache Möglichkeiten, ein leeres Diktat zu überprüfen, sind unten aufgeführt:
a = {}
if a == {}:
print ('empty dict')
if not a:
print ('empty dict')
Methode 1 ist strenger, denn wann a = Noneliefert Methode 1 das richtige Ergebnis, Methode 2 jedoch ein falsches Ergebnis.
Della
Ein Wörterbuch kann automatisch in einen booleschen Wert umgewandelt werden, der zu ausgewertet wird False für leeres Wörterbuch und True für nicht leeres Wörterbuch.
if myDictionary: non_empty_clause()
else: empty_clause()
Wem das zu idiomatisch erscheint, der kann auch testen len(myDictionary) für null bzw set(myDictionary.keys()) für eine leere Menge oder testen Sie einfach auf Gleichheit mit {}.
Die isEmpty-Funktion ist nicht nur unnötig, sondern Ihre Implementierung hat auch mehrere Probleme, die ich prima facie erkennen kann.
Die return False Anweisung ist eine Ebene zu tief eingerückt. Sie sollte sich außerhalb der for-Schleife und auf der gleichen Ebene wie die befinden for Aussage. Dadurch verarbeitet Ihr Code nur einen willkürlich ausgewählten Schlüssel, falls ein Schlüssel vorhanden ist. Wenn kein Schlüssel vorhanden ist, kehrt die Funktion zurück None, der in den booleschen Wert False umgewandelt wird. Autsch! Alle leeren Wörterbücher werden als falsch-nagative klassifiziert.
Wenn das Wörterbuch nicht leer ist, verarbeitet der Code nur einen Schlüssel und gibt seinen Wert in einen booleschen Wert zurück. Sie können nicht einmal davon ausgehen, dass bei jedem Aufruf derselbe Schlüssel ausgewertet wird. Es wird also falsch positive Ergebnisse geben.
Nehmen wir an, Sie korrigieren den Einzug des return False Anweisung und bringen Sie es außerhalb der for Schleife. Was Sie dann erhalten, ist der boolesche Wert ODER aller Schlüssel, oder False wenn das Wörterbuch leer ist. Trotzdem werden Sie falsch positive und falsch negative Ergebnisse haben. Führen Sie die Korrektur durch und testen Sie anhand des folgenden Wörterbuchs, um einen Beweis zu erhalten.
Um zu prüfen, ob
self.users
ist nicht leer, tun Sie es einfachif self.users
.– BrenBarn
20. April 2014 um 1:31 Uhr
Dein
isEmpty
kehrt tatsächlich zurückTrue
wenn der erste aus dem Wörterbuch gelieferte Schlüssel wahr ist und zurückkehrtFalse
Andernfalls. Wenn das Wörterbuch leer ist, kehrt es zurückNone
was nicht ist== False
.– Hyperboreus
20. April 2014 um 2:08 Uhr
Ihre if-Anweisung ist rückwärts.
– Verrückter Physiker
21. April 2015 um 3:55 Uhr
Achten Sie auf falsche Schlüssel stackoverflow.com/a/17347421/1379762
– Wajih
6. Februar 2016 um 19:20 Uhr
Mögliches Duplikat von Python: Effiziente Methode, um zu überprüfen, ob das Wörterbuch leer ist oder nicht
– Dreier
21. April 2016 um 6:12 Uhr