আপনি 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')