Тұрақты тізімдер (массивтер) – нөмірленген элементтер жиыны, яғни тізімнің кез келген элементіне қол жеткізу үшін оның нөмірін көрсету керек. Тізімдегі элементтің нөмірі элементтің өзін бірегей түрде анықтайды. Бірақ деректерді сандық сандар арқылы анықтау әрқашан қолайлы бола бермейді. Мысалы, пойыз бағыттары сандық-алфавиттік кодпен (сан және бір әріп) анықталады, ал әуе рейстері де сандық-алфавиттік кодпен анықталады, яғни пойыз немесе ұшақ рейстері туралы ақпаратты сақтау үшін ол идентификатор ретінде санды емес, мәтіндік жолды пайдалану ыңғайлы болуы керек.
Оның элементтерін сандық көрсеткішпен емес, ерікті түрде анықтауға мүмкіндік беретін деректер құрылымы сөздік немесе ассоциативті массив деп аталады. Python тіліндегі сәйкес деректер құрылымы dict деп аталады.
Сөздікті пайдаланудың қарапайым мысалын қарастырайық. «Capitals» сөздігін жасап көрейік, онда индексі елдің аты, мәні осы елдің астанасының атауы. Бұл оның астанасын ел атауы бар сызық бойынша анықтауды жеңілдетеді.
Сонымен, әрбір сөздік элементі екі нысаннан тұрады: кілт және мән. Біздің мысалда кілт – елдің аты, элемент – астананың аты. Кілт сөздіктің элементін анықтайды, мән – берілген кілтке сәйкес деректер. Негізгі мәндер бірегей; сөздікте екі бірдей кілт болуы мүмкін емес.
Сөздіктер өмірде кеңінен қолданылады, мысалы, кәдімгі қағаз сөздіктер (түсіндірме, орфографиялық, лингвистикалық). Оларда кілт – мақаланың сөз-атауы, ал құндылық – мақаланың өзі. Мақалаға қол жеткізу үшін кілт сөзді көрсету керек.
Деректер құрылымы ретінде сөздіктің тағы бір мысалы - телефон анықтамалығы. Онда кілт - атау, ал мән - телефон нөмірі. Сөздікте, телефон анықтамалығы да белгілі перне арқылы сөздік жазбасын табу оңай болатындай етіп сақталады (мысалы, жазбалар пернелердің алфавиттік ретімен сақталса, белгілі кілтті табу оңай, мысалы, екілік іздеу арқылы), бірақ кілт белгісіз болса және тек мәні белгілі болса, берілген мәні бар элементті іздеу сөздіктің барлық элементтерін дәйекті түрде сканерлеуді қажет етуі мүмкін.
Ассоциативті массивтің ерекше қасиеті оның динамизмі болып табылады: ерікті кілттермен жаңа элементтерді қосуға және бар элементтерді жоюға болады. Бұл жағдайда пайдаланылатын жадтың өлшемі ассоциативті массив өлшеміне пропорционалды болады. Ассоциативті массивтің элементтеріне қол жеткізу әдеттегі массивтерге қарағанда баяуырақ болса да, әдетте өте жылдам.
Python тілінде кілт ерікті өзгермейтін деректер түрі болуы мүмкін: бүтін және нақты сандар, жолдар, кортеждер. Сөздіктегі кілт жиын бола алмайды, бірақ ол frozenset түрінің элементі болуы мүмкін: жиын түріне ұқсас арнайы деректер түрі, жасалғаннан кейін өзгерту мүмкін емес. Сөздік элементінің мәні кез келген деректер түрі, соның ішінде өзгермелі болуы мүмкін.
Сөздіктерді келесі жағдайларда қолдану керек:
Кейбір объектілердің санын санау. Бұл жағдайда кілттер объектілер, ал мәндер олардың саны болатын сөздік жасау керек.
Нысанмен байланысты кез келген деректерді сақтау. Кілттер - бұл объектілер, мәндер - олармен байланысты деректер. Мысалы, оның реттік нөмірін айдың аты бойынша анықтау қажет болса, онда мұны сөздік арқылы жасауға болады Num['January'] = 1; Сан['February'] = 2; ....
Объектілер арасындағы сәйкестікті орнату (мысалы, «ата-ана-бала»). Кілт - объект, мән - сәйкес объект.
Егер сізге кәдімгі массив қажет болса, бірақ элементтің максималды индекс мәні өте үлкен болса және барлық мүмкін индекстер пайдаланылмаса («сирек массив» деп аталады), онда жадты сақтау үшін ассоциативті массивді пайдалануға болады.
Бос сөздікті dict() функциясын немесе бос бұйра жақшалар жұбы {} арқылы жасауға болады (сол себепті бос жиынды құру үшін бұйра жақшаларды пайдалану мүмкін емес). Белгілі бір бастапқы мәндер жиыны бар сөздікті жасау үшін келесі конструкцияларды пайдалануға болады:
Алғашқы екі әдісті тек олардың барлық элементтерін тізімдей отырып, шағын сөздіктер жасау үшін пайдалануға болады. Сонымен қатар, екінші әдісте пернелер dict функциясына аталған параметрлер ретінде беріледі, сондықтан бұл жағдайда пернелер тек жолдар болуы мүмкін және олар жарамды идентификаторлар болып табылады. Үшінші және төртінші жағдайларда дайын тізімдерді дәлел ретінде тапсырсаңыз, үлкен сөздіктерді жасауға болады, оларды міндетті түрде барлық элементтерді тізімдеу арқылы емес, бағдарламаны орындау кезінде құрастырылған кез келген басқа жолмен алуға болады. Үшінші әдісте dict функциясына тізімді беру қажет, оның әрбір элементі екі элементтен тұратын кортеж: кілт және мән. Төртінші әдіс zip функциясын пайдаланады, оған бірдей ұзындықтағы екі тізім беріледі: пернелер тізімі және мәндер тізімі.
Сөздік элементтерімен жұмыс
Негізгі операция: тізімдердегідей жазылған кілт арқылы элемент мәнін алу: A[key]. Егер берілген кілті бар элемент сөздікте болмаса, KeyError ерекше жағдайы көтеріледі.
Кілт арқылы мәнді анықтаудың тағы бір жолы get методы болып табылады: get: A.get(key). Егер get кілті бар элемент сөздікте болмаса, онда None қайтарылады. Екі аргументті белгілеу пішінінде A.get(key, val) әдісі кілті бар элемент сөздікте болмаса, val мәнін қайтарады.
Элементтің сөздікке тиесілілігін жиындардағы сияқты операцияларда емес, in арқылы тексеруге болады.
Сөздікке жаңа элемент қосу үшін оған кейбір мәнді тағайындау жеткілікті: A[key] = value.
Сөздіктен элементті жою үшін del A[key] операциясын пайдалануға болады (операция сөздікте ондай кілт жоқ болса, KeyError ерекше жағдайын тудырады. Мұнда сөздіктен элементті жоюдың екі қауіпсіз жолы берілген.
Бірінші жағдайда біз алдымен элементтің бар-жоғын тексереміз, ал екіншісінде біз ерекше жағдайды ұстаймыз және өңдейміз.
Сөздіктен элементті жоюдың тағы бір жолы pop әдісін қолдану болып табылады: A.pop(key). Бұл әдіс жойылатын элементтің мәнін қайтарады, егер осы кілті бар элемент сөздікте болмаса, ерекше жағдай көтеріледі. Екінші параметрді pop әдісіне өткізсеңіз, онда элемент сөздікте болмаса, pop әдісі осы параметрдің мәнін қайтарады. Бұл сөздіктен элементті қауіпсіз жоюдың ең оңай жолына мүмкіндік береді: A.pop(key, None).
Сөздік элементтерін асып кетуі
Сөздіктегі барлық элементтердің кілттерінің тізімін оңай ұйымдастыруға болады:
Келесі методтар сөздік элементтерінің көріністерін қайтарады. Көріністер жиындарға ұқсайды, бірақ сөздік элементтерінің мәндері өзгерсе, олар өзгереді. keys методы барлық элементтердің кілттерінің көрінісін қайтарады, values әдісі барлық мәндердің көрінісін қайтарады және items әдісі кілттер мен мәндердің барлық жұптарының (кортеждерінің) көрінісін қайтарады.
Тиісінше, сіз А сөздігі элементтерінің барлық мәндерінің арасында val мәні бар-жоғын келесідей жылдам тексеруге болады: val in A.values() және key айнымалысы элементтің кілтін қамтитындай циклды ұйымдастырыңыз. , ал val айнымалысы оның мәнін қамтиды: