python - online - অভিধান কী পাওয়া যায় না তা ফেরত পাঠান না



python programming pdf (8)

যদি তার কী বিদ্যমান থাকে তবে অভিধানের মান পেতে একটি উপায় দরকার, অথবা এটি না হলে কেবল None ফেরত পাঠাতে হবে।

যাইহোক, পাইথন কী- KeyError ব্যতিক্রমটি উত্থাপন করে, যদি আপনি একটি কী সন্ধান করেন যা বিদ্যমান নেই। আমি জানি যে আমি কী চেক করতে পারি, কিন্তু আমি আরো স্পষ্ট কিছু খুঁজছি। যদি কী অস্তিত্ব না থাকে তবে শুধু কোনও উপায় ফেরত দেওয়ার উপায় নেই?


অন্যরা উপরে বলেছে, আপনি পেতে () ব্যবহার করতে পারেন।

কিন্তু একটি কী চেক করার জন্য আপনি এটি করতে পারেন:

d = {}
if 'keyname' in d:

    # d['keyname'] exists
    pass

else:

    # d['keyname'] does not exist
    pass

আপনি __missing__(self, key) subclassing দ্বারা override এবং ফেরত কেউ পারে।

class MyDict(dict):
    def __missing__(self, key):
        return None

আপনি একটি dict বস্তুর get() পদ্ধতিটি ব্যবহার করতে পারেন, অন্যরা ইতিমধ্যেই প্রস্তাব করেছেন। অন্যথায়, আপনি ঠিক কি করছেন তার উপর নির্ভর করে, আপনি এই রকম সুইট try/except ব্যবহার করতে সক্ষম হবেন:

try:
   <to do something with d[key]>
except KeyError:
   <deal with it not being there>

যা ক্ষেত্রে হ্যান্ডলিং একটি খুব "পাইথনিক" পদ্ধতির বলে মনে করা হয়।


আপনি পেতে ব্যবহার করতে পারেন get()

value = d.get(key)

None যদি None থাকে তবে None ফেরত দেবে key is not in d । আপনি একটি ভিন্ন ডিফল্ট মান প্রদান করতে পারেন যা পরিবর্তে None ফেরত দেওয়া হবে None :

value = d.get(key, "empty")

আমি সাধারণত এই মত পরিস্থিতিতে জন্য একটি defaultdict ব্যবহার। আপনি একটি কারখানা পদ্ধতি সরবরাহ করেন যা কোনও আর্গুমেন্ট নেয় না এবং এটি একটি নতুন কী দেখলে একটি মান তৈরি করে। নতুন কীগুলির খালি তালিকার মতো কিছু ফেরত দিতে হলে এটি আরও বেশি কার্যকর ( উদাহরণ দেখুন )।

from collections import defaultdict
d = defaultdict(lambda: None)
print d['new_key']  # prints 'None'

আর আশ্চর্য! এটা ভাষা মধ্যে নির্মিত হয়।

    >>> help(dict)

    Help on class dict in module builtins:

    class dict(object)
     |  dict() -> new empty dictionary
     |  dict(mapping) -> new dictionary initialized from a mapping object's
     |      (key, value) pairs
    ...
     |  
     |  get(...)
     |      D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.
     |  
    ...

যদি আপনি আরো স্বচ্ছ সমাধান চান তবে আপনি এই আচরণটি পেতে স্বতঃস্ফূর্ত dict পারেন:

class NoneDict(dict):
    def __getitem__(self, key):
        return dict.get(self, key)

>>> foo = NoneDict([(1,"asdf"), (2,"qwerty")])
>>> foo[1]
'asdf'
>>> foo[2]
'qwerty'
>>> foo[3] is None
True

get() ব্যবহার করুন





python