Python:检查'Dictionary'是空的似乎不工作

我试图检查字典是否为空,但它不能正常工作。它只是跳过它并显示在线,除了显示消息之外没有任何内容。知道为什么吗?

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()))
893851 次浏览

Python中的空字典求值到False:

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

因此,您的isEmpty函数是不必要的。你所需要做的就是:

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

这里有三种方法可以检查dict是否为空。不过我更喜欢使用第一种方法。另外两种方法太啰嗦了。

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"

使用“任何”

dict = {}


if any(dict) :


# true
# dictionary is not empty


else :


# false
# dictionary is empty
dict = {}
print(len(dict.keys()))

如果length为0,则表示字典为空

你也可以使用get()。最初我认为它只是检查是否存在密钥。

>>> d = { 'a':1, 'b':2, 'c':{}}
>>> bool(d.get('c'))
False
>>> d['c']['e']=1
>>> bool(d.get('c'))
True

我喜欢get的原因是它不会触发异常,因此可以轻松遍历大型结构。

检查空字典的简单方法如下:

        a= {}


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

虽然方法1更严格,因为当a = None时,方法1将提供正确的结果,但方法2将给出错误的结果。

字典可以自动转换为布尔值,空字典的值为False,非空字典的值为True

if myDictionary: non_empty_clause()
else: empty_clause()

如果这看起来太习惯,您还可以测试len(myDictionary)是否为零,或set(myDictionary.keys())是否为空集,或简单地测试是否与{}相等。

isEmpty函数不仅是不必要的,而且你的实现有多个问题,我可以初步发现。

  1. return False语句缩进得太深了。它应该在for循环之外,并且与for语句处于同一级别。因此,如果存在一个键,那么您的代码将只处理一个任意选择的键。如果键不存在,函数将返回None,它将被强制转换为布尔值False。哎哟!所有空字典都将被归类为假否定。
  2. 如果字典不是空的,那么代码将只处理一个键,并将其值转换为布尔值。您甚至不能假设每次调用都计算相同的键。所以会有假阳性。
  3. 让我们假设你纠正了return False语句的缩进,并把它带到了for循环之外。然后你得到的是所有键的布尔值,如果字典为空则为False。你仍然会有假阳性和假阴性。根据下面的字典进行修正和测试以寻找证据。

# EYZ0

test_dict = {}
if not test_dict.keys():
print "Dict is Empty"

一个方法:

 len(given_dic_obj)
如果没有元素,

返回0 否则返回字典的大小

. xml

第二种方式:

# EYZ0

如果字典为空则返回False,否则返回True