Sorting the Dictionary in Python – जैसाकि हमने पहले भी बताया कि Dictionaries, List की तरह Sequence नहीं होते, इसलिए इनमें Data Items के Store होने का कोई निश्चित क्रम नहीं होता, जिन्हें Left-to-Right Order में Access किया जा सके। इसलिए यदि हम किसी Dictionary को Create करके उसमें बाद में जरूरत के अनुसार Data Items Add करते हैं, तो प्रत्येक Data Item, Dictionary के अन्तिम Data Item के रूप में Add हो जाता है और जब हम उन्हें Access करते हैं, तो वे Data Items हमें उसी क्रम में Retrieve होते हैं, जिस क्रम में उन्हें Add किया गया था।
जब तक Dictionary के Data Items की संख्या सीमित हो, तब तक तो कोई समस्या नहीं आती, लेकिन जब Data Items की संख्या हजारों-लाखों में पहुंच जाती है, तब इस तरह की Dictionary में Stored Data Items को Access and Manipulate करना Highers Processing Speed व RAM वाले Super Computer Systems के लिए भी काफी Time Consuming व Resource Intensive Task हो जाता है।
इसलिए इस स्थिति को Handle करने के लिए जरूरी होता है कि हम हमारे Dictionary के Keys की Sorting कर लें, ताकि उस पर Binary Search जैसे Fast Searching Algorithms को Apply किया जा सके।
Dictionary की Sorting करने का एक तरीका ये है कि हम Dictionary के keys() Method का प्रयोग करते हुए Dictionary की Keys को एक List Object में Store कर लें। फिर उस List के sort() Method का प्रयोग करते हुए उसे Sort कर लें और अन्त में इस Sorted List में Exist प्रत्येक Key से सम्बंधित Dictionary Item को Access कर लें, जो कि हमें पूरी Dictionary के Data Items को Sorted तरीके से Display कर देता है।
इस पूरी प्रक्रिया को हम निम्न Example द्वारा ज्यादा बेहतर तरीके से समझ सकते हैं-
[code] FileName: sortDictionary.py dicStudNames = { 4 : 'KRISHNA', 1 : 'MURARI', 3 : 'MADAN', 0 : 'TRIPURARI', 2 : 'MOHAN' } print("Student Record \n", dicStudNames, '\n') print("List of Keys") lstStudKeys = list(dicStudNames.keys()) print(lstStudKeys, "\n") print("After Sorting List of Keys") lstStudKeys.sort() print(lstStudKeys, "\n") print("Sorting based on Keys exist in List lstStudKeys \n") for studKey in lstStudKeys: print(studKey, "=>", dicStudNames[studKey]) Output Student Record {4: 'KRISHNA', 1: 'MURARI', 3: 'MADAN', 0: 'TRIPURARI', 2: 'MOHAN'} List of Keys [4, 1, 3, 0, 2] After Sorting List of Keys [0, 1, 2, 3, 4] Sorting based on Keys exist in List lstStudKeys 0 => TRIPURARI 1 => MURARI 2 => MOHAN 3 => MADAN 4 => KRISHNA [/code]
इस Example में सबसे पहले हमने dicStudNames नाम का एक Dictionary Object Create करके उसे Keys के रूप में 5 Random Index Numbers के साथ Initialize कर लिया है। यहां हमने Keys के रूप में Numbers को इसलिए Use किया है क्योंकि हमें इन Keys को List के Index Number की तरह Extract करना है और List केवल Number Value को ही Index Number की तरह Use कर सकता है, Strings Values को नहीं।
फिर निम्न Statement के माध्यम से हम Dictionary dicStudNames के keys() Method को Use करते हैं, जिसके परिणामस्वरूप ये Method हमें इस Dictionary Object के प्रत्येक Data Item के साथ Associated Keys को Return करता है और इन Return होने वाले Keys को list() Constructor द्वारा एक List Object के रूप में lstStudKeys Object में Store कर दिया जाता है।
lstStudKeys = list(dicStudNames.keys())
अगले Statement में जब इस lstStudKeys Object को Print किया जाता है, तो हमें निम्नानुसार Output प्राप्त होता है, जहां हम देख सकते हैं कि हमारे इस List Object में केवल वे ही Keys हैं, जिन्हें हमने अपनी Dictionary dicStudNames में Specify किया था-
List of Keys
[4, 1, 3, 0, 2]
फिर Example का निम्नानुसार अगला Statement Execute होता है-
lstStudKeys.sort()
जिसके परिणामस्वरूप lstStudKeys List Object में Stored सभी Data Items की Sorting हो जाती है, जिसे अगले print() Statement द्वारा Print कर दिया जाता है और हमें निम्नानुसार Output प्राप्त हो जाता है-
After Sorting List of Keys
[0, 1, 2, 3, 4]
अब अन्तिम Statement के रूप में निम्नानुसार for Statement Block Execute होता है-
for studKey in lstStudKeys:
print(studKey, “=>”, dicStudNames[studKey])
इस for … in Looping Statement के बारे में हम आगे विस्तार से Discuss करेंगे लेकिन यहां पर इसके बारे में कुछ Basics Clear करना निश्चित रूप से उपयोगी होगा। ये Looping Statement lstStudKeys नाम के List Object से One by One एक-एक Key Value Access करता है और उसे studKey Variable में Store कर देता है और ये काम तब तक होता रहता है, जब तक कि Python Program Control lstStudKeys List Object के अन्तिम Data Item को Access नहीं कर लेता।
for Loop के हर Iteration में lstStudkeys List Object से जो Key Value studKey Variable में Store होता है, for Loop में Specified print() Statement उस Key को Print करता है, साथ ही dicStudNames Dictionary में studKey Variable में Currently Stored Key के साथ Associated Name को भी Output में Display कर देता है और ये प्रक्रिया तब तक चलती रहती है, जब तक कि List Object lstStudKeys में Exist सभी Data Items Access नहीं हो जाते और इस पूरी प्रक्रिया के परिणामस्वरूप हमें जो Output प्राप्त होता है उसके अनुसार Dictionary dicStudNames के सभी Names Sorted Form में निम्नानुसार दिखाई देते हैं-
Sorting based on Keys exist in List lstStudKeys
0 => TRIPURARI
1 => MURARI
2 => MOHAN
3 => MADAN
4 => KRISHNA
Exactly इसी जरूरत को हम Python के Built-In Function sorted() द्वारा एक Single Step में भी पूरा कर सकते हैं जहां ये sorted() Function विभिन्न प्रकार के Object Types की Sorting बिना कोई Extra Code लिखे हुए अगले Example के अनुसार आसानी से कर देता है-
[code] FileName: sortedFunctionDictionary.py dicStudNames = { 4 : 'KRISHNA', 1 : 'MURARI', 3 : 'MADAN', 0 : 'TRIPURARI', 2 : 'MOHAN' } print("Student Record \n", dicStudNames, '\n') print("Sorting based on sorted() Function of Dictionary dicStudNames") for studKey in sorted(dicStudNames): print(studKey, "=>", dicStudNames[studKey]) Output Student Record {4: 'KRISHNA', 1: 'MURARI', 3: 'MADAN', 0: 'TRIPURARI', 2: 'MOHAN'} Sorting based on sorted() Function of Dictionary dicStudNames 0 => TRIPURARI 1 => MURARI 2 => MOHAN 3 => MADAN 4 => KRISHNA [/code]
इस Example में हालांकि हम Dictionary को Discuss कर रहे हैं, लेकिन Dictionary के प्रत्येक Item को Access करने के लिए हमने जिस Special Programming Construct का Use किया है, उसे for Loop के नाम से जाना जाता है, जो कि किसी Python Sequence के प्रत्येक Item को One by One Access करता है और जब तक Condition TRUE रहती है, तब तक इसके साथ Associated Statement Block को Execute करता रहता है।
Python का for Loop C/C++, Java के for Loop से थोड़ा सा अलग है लेकिन इसके काम करने का तरीका Internally बिल्कुल वैसा ही है, जैसा C/C++, Java, C# जैसी Languages में है। यानी ये भी किसी Sequence के विभिन्न Items की One by One Accessing करता है और ये काम तब तक करता रहता है, जब तक कि Sequence का अन्तिम Item Access नहीं हो जाता।
Python के for … in Loop में हमें Sequence के रूप में Specify किए गए Object से Access होने वाली प्रत्येक Value को एक User Defined Variable में Store करना होता है, और हमने हमारे पिछले Examples में इस User Defined Variable के रूप में studKey नाम का Variable Declare किया है, जिसमें हमेंशा Sequence का Currently Access होने वाला Item Exist रहता है। इस Loop को हम हर उस Object के साथ समान रूप से Use कर सकते हैं, जो Sequence की तरह काम करता है।
उदाहरण के लिए एक Python String भी एक प्रकार का Sequence ही होता है, इसलिए यदि हम किसी String के सभी Lower Case Characters को इस for … in Loop के माध्यम से Upper Case में Convert करना चाहें, तो इस जरूरत को पूरा करने के लिए हम निम्नानुसार एक Program Design कर सकते हैं-
[code] FileName: for_inLoop.py name = "krishna kumar" print("Student Name: ", name, '\n') print("Change Name to Upper Case Using for...in Loop") print("Student Name: ", end = '' ) for character in name: print(character.upper(), end = '') Output Student Name: krishna kumar Change Name to Upper Case Using for...in Loop Student Name: KRISHNA KUMAR [/code]
इस Example में हमने print() Function में अन्तिम Parameter के रूप में end=” लिखा है। हमने ऐसा इसलिए किया है क्योंकि Default रूप से print() Function अपने Content को एक Newline में ही Display करता है, जबकि हम चाहते हैं कि Student का पूरा नाम एक Single Line में ही Display हो। इसलिए इस end=” Parameter द्वारा हमने Python Interpreter को इस बात का Instruction दिया है कि वह Line का अन्त Blank Single Quotes के No Character को ही मान ले और एक New Line न ले।
इसीलिए जब इस Example का for…in Loop Execute होता है, तो name Variable में Stored Lower Case String Sequence “krishna kumar” के प्रत्येक Character को One by One Access करके character नाम के User Defined Variable में Store करता है और और फिर print() Function में उस Character को Uppercase में Convert करके अगले Character के साथ तब तक यही प्रक्रिया अपनाता है, जब तक कि name Variable में Stored सभी Characters Upper Case में Convert हो कर Display नहीं हो जाते।
Looping Statements के बारे में हम आगे विस्तार से जानेंगे लेकिन यहां ये समझ लेना उपयोगी है कि for…in Loop जिन Objects के Content को Left-to-Right Access करता है, वे सभी मात्र Sequence Operations ही नहीं होते बल्कि वे Iterable Operations होते हैं। (Sorting the Dictionary in Python)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Python in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।
Python in Hindi | Page: 602 | Format: PDF