我正在尝试检查字典是否为空但是行为不正常。它只是跳过它并显示 ONLINE ,除了显示消息外没有任何内容。有什么想法吗?
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()))
答案 0 :(得分:551)
Python中的空字典evaluate to 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()))
答案 1 :(得分:94)
以下三种方法可以检查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"
答案 2 :(得分:10)
dict = {}
print(len(dict.keys()))
如果length为零则表示dict为空
答案 3 :(得分:0)
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")
答案 4 :(得分:0)
检查空字典的简单方法如下:
a= {}
1. if a == {}:
print ('empty dict')
2. if not a:
print ('empty dict')
虽然方法1st更严格,因为当a = None时,方法1将提供正确的结果,而方法2将提供不正确的结果。
答案 5 :(得分:0)
字典可以自动转换为布尔值,对于空字典,其值为False
;对于非空字典,其值为True
。
if myDictionary: non_empty_clause()
else: empty_clause()
如果这看起来太惯用了,您还可以将len(myDictionary)
测试为零,或将set(myDictionary.keys())
测试为空集,或者仅测试与{}
的相等性。
isEmpty函数不仅是不必要的,而且您的实现也存在多个问题,这些问题我都可以发现初步。
return False
语句的缩进程度太深了。它应该在for循环之外,并且与for
语句处于同一级别。如此一来,您的代码将只处理一个任意选择的密钥(如果存在一个密钥)。如果键不存在,则函数将返回None
,并将其转换为布尔False。哎哟!所有空字典将被归类为假阴性。 return False
语句的缩进并将其移出for
循环之外。然后,您得到的是所有键的布尔值 OR ;如果字典为空,则为False
。仍然会有误报和误报。进行更正并针对以下词典进行检验以获取证据。 myDictionary={0:'zero', '':'Empty string', None:'None value', False:'Boolean False value', ():'Empty tuple'}
答案 6 :(得分:0)
test_dict = {}
if not test_dict.keys():
print "Dict is Empty"
答案 7 :(得分:-1)
您也可以使用get()。最初我认为它只检查密钥是否存在。
>>> d = { 'a':1, 'b':2, 'c':{}}
>>> bool(d.get('c'))
False
>>> d['c']['e']=1
>>> bool(d.get('c'))
True
我喜欢get的原因是它不会触发异常,所以它可以很容易地遍历大型结构。
答案 8 :(得分:-4)
为什么不使用相等测试?
def is_empty(my_dict):
"""
Print true if given dictionary is empty
"""
if my_dict == {}:
print("Dict is empty !")
答案 9 :(得分:-6)
使用'任何'
dict = {}
if any(dict) :
# true
# dictionary is not empty
else :
# false
# dictionary is empty