பைத்தான் வழங்கும் தரவு கட்டமைப்புகளில் மிகவும் சுவாரசியமானது அகராதி(Dictionary). பட்டியலுக்குப் பிறகு மாறும் தன்மை கொண்ட த.கட்டமைப்பு என அகராதியைச் சொல்லலாம். சுவாரசியம் என்று சொல்ல மற்றொரு காரணமும் உண்டு, இதுவரை பைத்தான் வழங்கிய அனைத்து த.கட்டமைப்புகளிலும் குறியீட்டு எண்கள் எதுவுமே நமது(நிரலாளர்) கட்டுப்பாட்டில் இல்லை. அவற்றைப் பயன்படுத்திக்கொள்ளலாமே ஒழிய, உருவாக்க இயலாது.
பட்டியலில், சரத்தில், மா.பட்டியலில் முதல் உறுப்பின் நேர் குறியீட்டு எண் 0 தான். அதை மாற்ற நமக்கு அதிகாரம் இல்லை. ஆனால் அகராதி தான் சேமிக்க இருக்கும் மதிப்பையும் அதை அணுக உதவும் சாவியையும் நிரலாளரே உருவாக்கும் வாய்ப்பை வழங்குகிறது. பட்டியலுக்கு [], மா.பட்டியலுக்கு (), சரத்திற்கு ”/”” என்றிருப்பதைப் போலவே அகராதியை அடையாளப்படுத்தச் சுருள் அடைப்புக்குறியை {} பயன்படுத்த வேண்டும்.
அகராதி எப்படி தரவுகளைச் சேமிக்கிறது?
ஒரு புத்தகத்தின் உள்ளடக்கப் பக்கத்தில் என்னவெல்லாம் இடம்பெற்றிருக்கும்? பக்க எண் மற்றும் அவை கொண்டிருக்கும் உள்ளடக்கத்தின் தலைப்பு, அவ்வளவுதான் இல்லையா? கிட்டத்தட்ட அகராதியும் கூட தனது தரவுகளை இப்படித்தான் சேமிக்கிறது.
d={key:values}
இதில் values என்பது உள்ளடக்கம், key என்பது அதை அணுகப் பயன்படும் பக்க எண். நிரலாளரின் மொழியில் சொல்வதானால் values என்பது தரவுகள், அவற்றைக் குறிக்கும் சாவி key. இங்கே சாவி என்பதை ஒரு புரிதலுக்காகப் பட்டியலில்/மா.பட்டியலில்/சரத்தில் பயன்படுத்தப்பட்ட குறியீட்டு எண்களோடு ஒப்பிட்டுப் புரிந்து கொள்ளலாம்.
ஒரு அகராதியை உருவாக்குவதற்கு முன்பு முக்கியமாகத் தெரிந்துகொள்வதற்கு என்று சில உண்டு. அவற்றைப் பேசிவிட்டு நிரலுக்குள் சென்றுவிடுவோம்.
1) அகராதி மாறும் தன்மைகொண்டது என்பது உண்மைதான். ஆனால் அவற்றில் ஒரு திருப்பம் உள்ளது. நீங்கள் அகராதியில் சேமிக்கும் தரவுகளில் எத்தனை மாற்றங்கள் வேண்டுமானாலும் செய்துகொள்ளலாம். ஆனால் சர்வ நிச்சயமாக அவற்றைக் குறிக்கும் சாவியில் எந்தவொரு மாற்றத்தையும் செய்ய இயலாது.
எளிமையாக இப்படிச் சொல்லலாம். தரவுகள்(values) மாறும் தன்மைகொண்டதாகவும், அதன் சாவி(key) மாறாத தன்மைகொண்டதாகவும் இருத்தல் வேண்டும். இலக்கண ரீதியாகவே இப்படித்தான், இவ்விதியை மீறினால் பைத்தான் பால்போல பொங்கிடும்.
2) மாணிக்கத்திற்கு பாட்ஷா என்றொரு பெயர் இருப்பதைப் போலவே, அகராதிக்கு வரிசைப்படுத்தப்படாத சேகரிப்பு(Unordered Collection) என்று மற்றுமொரு பெயருண்டு. {சாவி:தரவுகள்} எவ்வாறு உருவாக்கப்படுகிறதோ அதன் வரிசையிலேயே சேமிக்கப்படும் என்பதற்கு எந்தவொரு ஊர்ஜிதமும் இல்லை. காரணம் சாவியை நிரலாளர் தனது விருப்பத்திற்கு தானே உருவாக்கிக் கொள்கிறார், பிறகெப்படி அதன் வரிசையிலேயே சேமிக்கப்படும்?
இனி நிரல்கள் மூலம் மேலும் கற்போம்.
நிரல் 1: அகராதியை உருவாக்குதல்
இந்நிரலில் நீங்கள் கவனிக்க வேண்டியது
1) சுருள் அடைப்புக்குறி {} பயன்படுத்தப்பட்டுள்ளதா?
ஆம்
2) உருவாக்கப்பட்டுள்ள 3 சாவிகளும் மாறாத தன்மைகொண்டதா?
ஆம். சரம் தரவு வகையைக்கொண்டது.
3) ஒவ்வொரு {சாவி:தரவுகள்} ஜோடியும் காற்புள்ளியைக்கொண்டு வேறுபடுத்திக் காண்பிக்கப்பட்டு இருக்கிறதா?
ஆம். மொத்தம் 3 ஜோடி {சாவி:தரவுகள்} உள்ளன. அவையும் காற்புள்ளியால் பிரிக்கப்பட்டுள்ளன.
வாழ்த்துகள். நீங்கள் உங்கள் முதல் அகராதியை வெற்றிகரமாக உருவாக்கிவிட்டீர்கள்.
நிரல் 2: மு.வ.செயல்பாட்டைக்கொண்டு அகராதியை உருவாக்குதல்
dict() என்ற மு.வ.செயல்பாட்டிற்கு அளவுருக்களை அனுப்புவதன் மூலம் புதிதாக ஒரு அகராதியை உண்டாக்கலாம். ஆனால் {}யை இங்கே பயன்படுத்த இயலாது, சாவி=”தரவுகள்” என்று உருவாக்குவதன் மூலம் அகராதி தனக்கே உண்டான வடிவத்தில் அதைச் சேமித்துக்கொள்ளும். ஒரு அகராதியை உருவாக்க பல்வேறு வழிகள் உண்டு, அவற்றில் இதுவும் ஒன்று.
நிரல் 3: மா.பட்டியலின் பட்டியல்
அதே dict() செயல்பாடு தான். ஆனால் அளவுருக்களை மா.பட்டியலின் பட்டியலாக அனுப்பி ஒரு அகராதியை உருவாக்குகிறோம். ஒரு பட்டியலின் உள்ளே 3 மா.பட்டியல் சேமிக்கப்பட்டு இருக்கிறது. ஒவ்வொரு மா.பட்டியலின் முதல் உறுப்பு சாவி எனவும், இரண்டாம் உறுப்பு தரவுகள் எனவும் பைத்தானால் புரிந்துகொள்ளப்படும். ஆக மொத்தம் 3 {சாவி:தரவுகள்} ஜோடிகளை உருவாக்கியிருக்கிறோம்.
இதுவரை பார்த்த, இனி பார்க்கவிருக்கும் அனைத்து நிரல்களிலும் சாவியின் தரவு வகையின் மீது ஒரு கண் வைத்துக்கொள்ளுங்கள்.
நிரல் 4: தனித்தனி பட்டியலில் சாவியும், தரவுகளும்
ஒரு அகராதிக்கு உரிய மொத்த சாவிகளையும் தரவுகளையும் தனித்தனி பட்டியலாக உருவாக்கி, அவ்விரண்டு பட்டியலையும் zip() என்ற மு.வ.செயல்பாட்டுக்கு அளவுருக்களாக அனுப்புகிறோம். அவர் அனுப்பும் பதிலை மீண்டும் dict()ற்கு தந்தால், நீங்கள் விரும்பும் அகராதி தயார்.
நிரல் 5: போலி சாவிகளைக்கொண்ட அகராதி
ஒரே சாவி இரண்டு அல்லது அதற்கும் அதிகமான தடவை ஒரு அகராதியில் இடம்பெற்றிருந்தால் என்ன நடக்கும்? கடைசியாக அச்சாவி குறித்துக் கொண்டிருக்கும் தரவுகள் சேமிக்கப்படும், அவ்வளவுதான். மேற்கண்ட நிரலில் ரஹீம் இரண்டுமுறை தனக்காக துண்டு போட்டு வைத்திருக்கிறார், ஆனால் அவரது கடைசி துண்டான 30 தான் அகராதியில் இடம்பெற்றிருக்கிறது.
நிரல் 6: மாறும் தன்மைகொண்ட சாவி
சாவி மாறா தன்மை கொண்டிருக்க வேண்டும் என்பது தான் விதி. அதையும் மீறி இனியொரு விதி செய்வோம் என்று மாறும் தன்மைகொண்ட பட்டியலைச் சாவியாகத் தந்தால் என்னாகும்? பைத்தான் கொந்தளிக்கும்.
நிரல் 7: அகராதியின் தரவுகளை அணுகுதல்
விதவிதமாக அகராதிகளை உருவாக்கிப் பார்த்துவிட்டோம். இப்போது அதன் தரவுகளை அணுகியாக வேண்டும். எப்படிச் செய்வது? சாவியைக் கொண்டுதான்.
d[key]யை அச்சிட்டால், அதன் தரவுகள் காணக்கிடைக்கும். மேலிருக்கும் நிரலில் திருவாளர் ஜானை அணுக my_dict[‘name’] எனும் அவரது சாவியைத் தான் பயன்படுத்தியிருக்கிறோம். அவரது வயது, இருப்பிடத்தைப் பெற முறையே my_dict[‘age’] மற்றும் my_dict[‘city’] என்று எழுதியிருக்கிறோம். ஆக அகராதியின் தரவுகளைப் பெற நீங்கள் நினைவில்கொள்ள வேண்டியது d[key] எனும் நிரல் வரியைத்தான்.
நிரல் 8: மறுசெய்கை வரிகளின் மூலம் அகராதியின் தரவுகளை அணுகுதல்
for loop மற்றும் in இயக்கியைக் கொண்டு அகராதியின் ஒவ்வொரு சாவியையும் அடைய முடியும். அது கிடைத்துவிட்டால் பிறகென்ன கவலை? அதன் தரவுகளைப் பெறுவது எளிமையானது தான். இந்நிரலில் for loop 3 முறை இயங்கும், ஒவ்வொரு செய்கையிலும் அதன் முடிவுகள் பின்வருமாறு இருக்கும்.
செய்கை 1: i=”a” -> my_dict[“a”]-> 1
செய்கை 2: i=”b” -> my_dict[“b”]-> 2
செய்கை 3: i=”c” -> my_dict[“c”]-> 3
நிரல் 9: அகராதியின் தரவுகளை மாற்றியமைத்தல்
my_dict[‘RCB’]=10
அகராதியில் இடம்பெற்றிருக்கும் ‘RCB’ என்னும் சாவியின் தரவுகளை மாற்றியிருக்கிறோம். ஏற்கனவே அச்சாவி அகராதியில் இருக்கிறது அதனால் தனது மதிப்பை மனமுவந்து மாற்றிக்கொள்கிறது.
ஒருவேளை அச்சாவி அந்த அகராதியிலேயே இல்லையென்றால்?
நிரல் 10: புதிய தரவுகளை அகராதியில் சேர்த்தல்
அதே டைலர் தான், ஆனால் வாடகை வேறு. இந்நிரலில் ‘MI’ என்ற சாவியே அகராதியில் இல்லை. எனில் பொங்குகிறதா பைத்தான்? அதெல்லாம் ஒன்றுமில்லை.
1) அகராதியில் சாவி இடம்பெற்றிருந்தால் அதன் தரவுகள் நிரலில் உள்ளபடி மாற்றியமைக்கப்படும்
2) ஒருவேளை சாவி இல்லாமலிருந்தால், அகராதியில் புதிதாக இணைக்கப்படும்.
இந்நிரல் 2ஆம் விதியை பின்பற்றுகிறது.
நிரல் 11: இல்லாத சாவியை அணுகுதல்
இல்லாத சாவி ஒன்றின் தரவுகளை அச்சிட முயன்றால் , மேற்கண்டவாறு பைத்தான் பொங்கும்.
நிரல் 12:
உருவாக்குதல், அணுகுதல், மாற்றியமைத்தல், மேம்படுத்தப்பட்ட அகராதியை அச்சிடுதல் என இதுவரை பார்த்த அனைத்தையும் ஒரே நிரலாக எழுதியிருக்கிறோம்.
வெளியீடு:
அடுத்த வாரம் அகராதியின் மு.வ.செயல்பாடுகள்.
(தொடரும்)