আপনি get
দুবার ব্যবহার করতে পারেন :
example_dict.get('key1', {}).get('key2')
None
হয় key1
বা key2
না থাকলে এটি ফিরে আসবে ।
মনে রাখবেন, এই এখনও একটি বাড়াতে পারে AttributeError
যদি example_dict['key1']
বিদ্যমান কিন্তু একটি অভি (বা একটি অভি মত বস্তু একটি পক্ষে নয়, সে get
পদ্ধতি)। try..except
আপনি যে কোডটি পোস্ট একটি বাড়াতে হবে TypeError
পরিবর্তে যদি example_dict['key1']
unsubscriptable হয়।
আর একটি পার্থক্য হ'ল try...except
প্রথম অনুপস্থিত কী এর সাথে সাথেই শর্ট সার্কিট। get
কল অফ চেইন না।
আপনি যদি সিনট্যাক্স সংরক্ষণ করতে চান, example_dict['key1']['key2']
তবে এটি কখনও কী-এরফারগুলি বাড়িয়ে তুলতে চান না, তবে আপনি হ্যাশার রেসিপিটি ব্যবহার করতে পারেন :
class Hasher(dict):
# https://stackoverflow.com/a/3405143/190597
def __missing__(self, key):
value = self[key] = type(self)()
return value
example_dict = Hasher()
print(example_dict['key1'])
# {}
print(example_dict['key1']['key2'])
# {}
print(type(example_dict['key1']['key2']))
# <class '__main__.Hasher'>
নোট করুন যে কীটি নিখোঁজ থাকা অবস্থায় এটি একটি খালি হাশর ফেরত দেয়।
যেহেতু Hasher
হয় একটি উপশ্রেণী dict
আপনি একই ভাবে একটি Hasher ব্যবহার করতে পারেন আপনি একটি ব্যবহার করতে পারে dict
। সমস্ত একই পদ্ধতি এবং বাক্য গঠন উপলব্ধ, হাশাররা অনুপস্থিত কীগুলি আলাদাভাবে আচরণ করে।
আপনি একটি নিয়মিত রূপান্তর করতে পারেন dict
একটি মধ্যে Hasher
ভালো:
hasher = Hasher(example_dict)
এবং Hasher
একটি নিয়মিত dict
হিসাবে সহজেই রূপান্তর করুন :
regular_dict = dict(hasher)
আরেকটি বিকল্প হ'ল সহায়তা কর্মে কদর্যতা লুকানো:
def safeget(dct, *keys):
for key in keys:
try:
dct = dct[key]
except KeyError:
return None
return dct
সুতরাং আপনার বাকী কোড অপেক্ষাকৃত পঠনযোগ্য থাকতে পারে:
safeget(example_dict, 'key1', 'key2')