পাইথন: একটি 'অভিধান' খালি আছে কিনা তা পরীক্ষা করা কার্যকর বলে মনে হচ্ছে না


396

আমি চেষ্টা করছি যে কোনও অভিধান খালি আছে কিনা তবে এটি সঠিকভাবে আচরণ করে না। এটি কেবল এটি এড়িয়ে যায় এবং বার্তাটি প্রদর্শন ব্যতীত কিছু না করে অনলাইনে প্রদর্শন করে। কোন ধারণা কেন?

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

6
self.usersঅদম্য কিনা তা পরীক্ষা করার জন্য, কেবলমাত্র করুন if self.users
ব্রেণবার্ন

4
অভিধান থেকে উত্পন্ন প্রথম কীটি সত্য এবং অন্যথায় isEmptyপ্রত্যাবর্তিত Trueহলে আপনার আসলে ফিরে আসে False। তাহলে অভিধান খালি থাকে, এটা ফেরৎ Noneযা নয় == False
হাইপারবোরাস

আপনার যদি বিবৃতি পিছনে হয়।
ম্যাড পদার্থবিদ


উত্তর:


736

খালি অভিধানগুলি পাইথনে মূল্যায়ন করে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()))

7
@ আপনি যে লিঙ্কটি যুক্ত করেছেন তা অপ্রাসঙ্গিক: bool({False: False})এখনও মূল্যায়ন করে True। আপনি যে লিঙ্কটি দিয়েছেন সেটি anyপদ্ধতির সাথে সঙ্গতিপূর্ণ , যা কীগুলির উপর নির্ভর করে।
ইউলিস বিএন

@ ওয়াজিঃ এর মানে কী?
চার্লি পার্কার

2
আমি মনে করি '
ডিক্ট

রাজি হয়েছি, আমার বুলিয়ানগুলি ব্যবহার করার মতো মনে হচ্ছে এবং not <dict>এটিও পরিষ্কার নয়
ক্রিদনভূ

130

ডিক খালি কিনা তা এখানে তিনটি উপায় যাচাই করতে পারেন। আমি যদিও প্রথম উপায়টিই পছন্দ করি। অন্য দুটি উপায় উপায় খুব শব্দযুক্ত।

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"

44
দীর্ঘশ্বাস ত্যাগ করুন ... প্রত্যেকে "পাইথোনিক" হতে পছন্দ করে এবং কমপক্ষে অক্ষরগুলি টাইপ করতে যায়। প্রথমত, আরেকটি মানদণ্ড হ'ল পাঠযোগ্যতা। দ্বিতীয়ত, উপরের উত্তরের প্রথম পরীক্ষাটি কেবলমাত্র ডিক উপস্থিত থাকলে এবং খালি থাকলেই সত্য, তবে টেস্ট_ডিক্ট কোনওটিই নয়। সুতরাং এই পরীক্ষাটি কেবল তখনই ব্যবহার করুন যখন আপনি জানেন যে ডিক অবজেক্টটি উপস্থিত রয়েছে (বা যখন পার্থক্যটি কোনও বিষয় নয়)। দ্বিতীয় উপায়েরও সেই আচরণ রয়েছে। টেস্ট_ডিক্ট কোনওটি না হলে কেবল তৃতীয় উপায়টি ছাঁটাই করে।
আন্দ্রেয়াস মাইয়ার

1
@ আন্দ্রেস মাইয়ার ঠিক আমার অনুভূতিটিও বোধ করি। এছাড়াও, অজগরটি গতিশীলভাবে টাইপ করা হয়। কোনও ফাংশনের অভ্যন্তরে "যদি এক্স শূন্য অভিধান হয় তা পরীক্ষা করা সাধারণ হয়, তবে এটি করুন; এক্সটি যদি খালি খালি অ্যারে হয়, তবে এটি করুন"। তারপরে if xx কোডটি অ্যারে হলে প্রথম কোডটি ব্যর্থ হবে
jf328

1
@ আপনি যে লিঙ্কটি যুক্ত করেছেন এটি এখনও এখানে অপ্রাসঙ্গিক ... কেন তা দেখুন
ইউলিস বিএন

1
আমি যে উদ্বেগগুলি ভাগ করি তার কারণে প্রযুক্তিগতভাবে সঠিক হলেও এটি উত্সাহ দেওয়া হচ্ছে না। @আন্দ্রেয়াসমাইয়ার
স্টানার

16
dict = {}
print(len(dict.keys()))

দৈর্ঘ্য শূন্য হলে ডিকটি ফাঁকা থাকে


3
যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
DimaSan

1
len(dict.keys())সমতুল্যlen(dict)
পিডিপিএক্সিস

@pdpAxis এটির মান হিসাবে, যদিও আমি বাজি ধরেছি এটি বাস্তবায়ন dict.__len__সম্ভবত কিছুটা দ্রুত। :)
মতিন উলহাক

6

খালি ডিকটি পরীক্ষা করার সহজ উপায় নীচে:

        a= {}

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

যদিও 1 ম পদ্ধতিটি আরও কড়া হিসাবে যখন a = কিছুই নয়, পদ্ধতি 1 সঠিক ফলাফল সরবরাহ করবে তবে পদ্ধতি 2 একটি ভুল ফলাফল দেবে।


1

একটি অভিধান স্বয়ংক্রিয়ভাবে বুলিয়ানে কাস্ট করা যেতে পারে যা Falseখালি অভিধানের Trueজন্য এবং খালি শূন্য অভিধানের জন্য মূল্যায়ন করে ।

if myDictionary: non_empty_clause()
else: empty_clause()

যদি এটি খুব অহংকারী বলে মনে হয় তবে আপনি len(myDictionary)শূন্যের জন্য, বা set(myDictionary.keys())খালি সেটটির জন্যও পরীক্ষা করতে পারেন , বা কেবল সমতার জন্য পরীক্ষা করতে পারেন{}

আইএমপিটি ফাংশনটি কেবল অপ্রয়োজনীয়ই নয় তবে আপনার প্রয়োগেও একাধিক সমস্যা রয়েছে যা আমি প্রাইম-ফেসিকে সনাক্ত করতে পারি।

  1. return Falseবিবৃতি খুব গভীরে এক স্তর ইন্ডেন্টযুক্ত করা হয়। এটি লুপের বাইরে এবং forবিবৃতি হিসাবে একই স্তরের হওয়া উচিত । ফলস্বরূপ, আপনার কোডটি যদি একটি কী উপস্থিত থাকে তবে নির্বিচারে নির্বাচিত কীটি কেবলমাত্র একটিতে প্রক্রিয়া করবে। যদি কোনও কী উপস্থিত না থাকে তবে ফাংশনটি ফিরে আসবেNone , যা বুলিয়ান ফ্যালাসে ফেলে দেওয়া হবে। সেকি! সমস্ত খালি অভিধানগুলিকে ভুয়া-নেগেটিভ হিসাবে শ্রেণীবদ্ধ করা হবে।
  2. যদি অভিধানটি খালি না থাকে, তবে কোডটি কেবল একটি কী প্রসেস করবে এবং এর মান castালিকে বুলেয়ানে ফিরিয়ে দেবে। আপনি ধরেও নিতে পারবেন না যে প্রত্যেকবার আপনি যখন কল করবেন তখন একই কীটি মূল্যায়ন করা হবে। সুতরাং মিথ্যা ইতিবাচক হবে।
  3. আমাদের বলুন আপনি return Falseবিবৃতিটির ইনডেন্টেশনটি সংশোধন করে এটিকে forলুপের বাইরে নিয়ে আসুন । তারপরে আপনি যা পাবেন তা হ'ল সমস্ত কীগুলির বুলিয়ান OR বা অভিধানটি Falseখালি। তবুও আপনার কাছে মিথ্যা ইতিবাচক এবং মিথ্যা নেতিবাচক বিষয় থাকবে। একটি প্রমাণের জন্য নিম্নলিখিত অভিধানের বিরুদ্ধে সংশোধন এবং পরীক্ষা করুন।

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


-1

আপনি get () ব্যবহার করতে পারেন। প্রাথমিকভাবে আমি বিশ্বাস করি যে এটি কেবল কী আছে কিনা তা পরীক্ষা করে দেখুন।

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

আমি যা পেতে চাই তা হ'ল এটি কোনও ব্যতিক্রম ট্রিগার করে না, তাই এটি বড় স্ট্রাকচারগুলি অতিক্রম করতে সহজ করে তোলে।


-4

সমতা পরীক্ষা কেন ব্যবহার করবেন না?

def is_empty(my_dict):
    """
    Print true if given dictionary is empty
    """
    if my_dict == {}:
        print("Dict is empty !")

এটি দেখতে একটি সিনট্যাক্স ত্রুটির মতো দেখায় এবং প্রশ্নের প্রসঙ্গে চেকটি কীভাবে প্রয়োগ করতে হয় তা প্রদর্শন করে না।
রোল্যান্ড ওয়েবার

-7

'যে কোনও' ব্যবহার করুন

dict = {}

if any(dict) :

     # true
     # dictionary is not empty 

else :

     # false 
     # dictionary is empty

4
anyডিকটিতে কোনও সত্যিকারের কী রয়েছে কিনা তা পরীক্ষা করে দেখুন, any({0: 'something'})False
ডিকটি

হ্যাঁ, সত্যবাদী এবং ফাঁকা উভয় ক্ষেত্রেই বাঁচানোর জন্য, অন্যান্য জ্ঞানী বুল সত্যবাদী মামলার পক্ষে সত্য দিতেন। আপনি যদি সাধারণ কোডিং উদ্দেশ্যে মনে করেন।
ছোটু সরদার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.