programing

사전이 비어 있는지 확인하는 방법은?

megabox 2023. 7. 8. 10:47
반응형

사전이 비어 있는지 확인하는 방법은?

사전이 비어 있는지 확인하려고 하는데 제대로 작동하지 않습니다.메시지를 표시하는 것 외에는 아무것도 없이 그냥 건너뛰고 온라인으로 표시합니다.왜 그런지 아십니까?

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

Python에서 평가되는 빈 사전:

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

딕트가 비어 있는지 확인할 수 있는 세 가지 방법이 있습니다.하지만 저는 첫 번째 방법만 사용하는 것을 선호합니다.다른 두 가지 방법은 너무 말이 많습니다.

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"
d = {}
print(len(d.keys()))

길이가 0이면 딕트가 비어 있음을 의미합니다.

빈 딕트를 확인하는 간단한 방법은 다음과 같습니다.

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

Method 1은 더 엄격합니다, 왜냐하면.a = None방법 1은 올바른 결과를 제공하지만 방법 2는 잘못된 결과를 제공합니다.

사전은 자동으로 부울에 캐스팅될 수 있으며, 이는 다음과 같습니다.False빈 사전과True비어 있지 않은 사전의 경우.

if myDictionary: non_empty_clause()
else: empty_clause()

만약 이것이 너무 관용적으로 보인다면, 당신은 또한 테스트할 수 있습니다.len(myDictionary)0에 대하여, 또는set(myDictionary.keys())빈 집합의 경우 또는 단순히 다음과 같은 값을 검정합니다.{}.

is Empty 기능은 불필요할 뿐만 아니라 당신의 구현에는 여러 가지 문제가 있어 제가 직접 확인할 수 있습니다.

  1. return False문이 한 수준 너무 깊게 들여씁니다.for 루프 외부에 있어야 하며, 다음과 같은 레벨에 있어야 합니다.for진술.따라서 키가 존재하는 경우 코드는 임의로 선택한 하나의 키만 처리합니다.키가 존재하지 않으면 기능이 반환됩니다.None부울 False에 캐스팅됩니다.이런! 모든 빈 사전은 가짜 사전으로 분류될 것입니다.
  2. 사전이 비어 있지 않으면 코드는 하나의 키만 처리하고 값 캐스트를 부울로 반환합니다.호출할 때마다 동일한 키가 평가된다고 가정할 수도 없습니다.그래서 잘못된 긍정이 있을 것입니다.
  3. 당신이 다음의 들여쓰기를 수정한다고 가정하겠습니다.return False진술하고 그것을 외부로 가져옵니다.for루프. 그러면 당신이 얻는 것은 모든 키의 부울 OR, 또는False사전이 비어 있는 경우여전히 잘못된 긍정과 잘못된 부정이 있을 것입니다.다음 사전에 근거하여 수정하고 테스트합니다.

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

1번길

len(given_dic_obj) 

요소가 없으면 0을 반환합니다.그렇지 않으면 사전의 크기를 반환합니다.

제2의 길

bool(given_dic_object)

온다아를 반환합니다.False사전이 비어 있으면 True를 반환합니다.

get()도 사용할 수 있습니다.처음에는 키가 있는지만 확인하는 것으로 믿었습니다.

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

제가 get에서 좋아하는 것은 예외를 유발하지 않기 때문에 큰 구조물을 쉽게 통과할 수 있다는 것입니다.

임의'를 사용합니다.

dict = {}

if any(dict) :

     # true
     # dictionary is not empty 

else :

     # false 
     # dictionary is empty

언급URL : https://stackoverflow.com/questions/23177439/how-to-check-if-a-dictionary-is-empty

반응형