Сөздіктер. Питондаы сздіктер (ассоциативті массивтер)
Скачать 95.04 Kb.
|
Питондағы сөздіктер (ассоциативті массивтер) Кәдімгі тізімдер (массивтер)-бұл нөмірленген элементтер жиынтығы, яғни тізімнің кез-келген элементіне жүгіну үшін оның нөмірін көрсету керек. Тізімдегі элемент нөмірі элементтің өзін анықтайды. Бірақ сандық сандар бойынша деректерді анықтау әрқашан ыңғайлы бола бермейді. Мысалы, Ресейдегі пойыздардың бағыттары сандық-әріптік кодпен (сан және бір Сан) анықталады, сонымен қатар рейстер сандық-әріптік кодпен анықталады, яғни пойыздар мен ұшақтардың рейстері туралы ақпаратты идентификатор ретінде сақтау үшін санды емес, мәтіндік жолды пайдалану ыңғайлы болар еді. Оның элементтерін сандық индекспен емес, ерікті түрде анықтауға мүмкіндік беретін мәліметтер құрылымы сөздік немесе ассоциативті массив деп аталады. Питон тіліндегі тиісті мәліметтер құрылымы dict деп аталады. < br> сөздікті қолданудың қарапайым мысалын қарастырыңыз. Біз Capitals сөздігін аламыз, онда индекс елдің атауы, ал мәні & nbsp; - осы елдің астанасының атауы. Бұл оның астанасын елдің атымен оңай анықтауға мүмкіндік береді. # Бос сөздік құрайық Capitals Capitals = dict() # Оны бірнеше мәндермен толтырыңыз Capitals['Russia'] = 'Moscow' Capitals['Ukraine'] = 'Kiev' Capitals['USA'] = 'Washington' # Елдің атын есептейміз print('Сіз қай елде тұрасыз?') country = input() # Сөздікте мұндай ел бар-жоғын тексеріңіз Capitals if country in Capitals: # Егер бар болса, біз оның астанасын шығарамыз print('Сіздің еліңіздің астанасы', Capitals[country]) else: # Астананың атауын сұрап, оны сөздікке қосыңыз print('Сіздің еліңіздің астанасы қалай аталады?') city = input() Capitals[country] = city Сонымен, сөздіктің әр элементі екі объектіден тұрады: кілт және мән. Біздің мысалда кілт-бұл елдің атауы, мағынасы-астананың атауы. Кілт сөздік элементін анықтайды, мағынасы-осы кілтке сәйкес келетін мәліметтер. Кілт мәндері & nbsp;— бірегей, сөздікте екі бірдей кілт болуы мүмкін емес. Өмірде сөздіктер кең таралған, мысалы, әдеттегі қағаз сөздіктер (түсіндірме, орфографиялық, лингвистикалық). Оларда кілт-мақаланың тақырыбы, ал мәні-мақаланың өзі. Мақалаға қол жеткізу үшін кілт сөзін көрсету керек. Деректер құрылымы ретінде сөздіктің тағы бір мысалы & nbsp; - Телефон анықтамалығы. Онда кілт-аты, ал & nbsp мәні-телефон нөмірі. Сөздік те, Телефон анықтамалығы да белгілі кілтпен сөздік элементін табу оңай болатындай етіп сақталады (мысалы, егер жазбалар кілттердің алфавиттік тәртібінде сақталса, онда сіз белгілі кілтті оңай таба аласыз, мысалы, екілік іздеу), бірақ егер кілт белгісіз болса және тек мән белгілі болса, онда осы мәні бар элементті іздеу сөздіктің барлық элементтерін дәйекті қарауды қажет етуі мүмкін. Ассоциативті массивтің ерекшелігі оның динамикасы болып табылады: оған ерікті кілттері бар жаңа элементтерді қосуға және бұрыннан бар элементтерді жоюға болады. Бұл жағдайда пайдаланылатын жадтың мөлшері ассоциативті массивтің мөлшеріне пропорционалды. Ассоциативті массивтің элементтеріне қол жеткізу қарапайым массивтерге қарағанда баяу болса да, тез орындалады. Питон тілінде кілт ретінде деректердің еркін өзгермейтін түрі болуы мүмкін: бүтін және нақты сандар, жолдар, түйіндер. Сөздіктің кілті көп болуы мүмкін емес, бірақ frozenset типті элемент болуы мүмкін: арнайы деректер түрі, ол set типінің аналогы болып табылады, оны жасағаннан кейін өзгертуге болмайды. Сөздік элементінің мәні кез-келген деректер түрі, соның ішінде өзгертілуі мүмкін. Сөздіктерді қашан қолдану керек Сөздіктерді келесі жағдайларда қолдану керек: Кейбір объектілердің санын есептеу. Бұл жағдайда кілт— Нысандар, ал мәндері-олардың саны болатын сөздік құру керек. Сақтауға, қандай да бір деректердің объектісіне байланысты. Кілттер & nbsp; - Нысандар, мәндер - байланысты деректер. Мысалы, егер айдың атауы бойынша оның реттік нөмірін анықтау қажет болса, N num ['қаңтар'] = 1; num ['ақпан'] = 2;.... Нысандар арасында сәйкестікті орнату(мысалы, "ата-ана"). Кілт - нысан, мән - оған сәйкес нысан. Егер сізге қарапайым массив қажет болса, бірақ элемент индексінің максималды мәні өте үлкен, бірақ сонымен бірге барлық мүмкін индекстер ("сирек массив" деп аталады) пайдаланылмаса, жадты үнемдеу үшін ассоциативті массивті қолдануға болады. Сөздік құру Бос сөздікті dict() немесе бос пішінді жақшалардың {} жұбының көмегімен жасауға болады (сондықтан бос жиын жасау үшін бұйра жақшаларды қолдануға болмайды). Бастапқы мәндердің кейбір жиынтығымен сөздік құру үшін келесі конструкцияларды қолдануға болады: Capitals = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington'} Capitals = dict(Russia = 'Moscow', Ukraine = 'Kiev', USA = 'Washington') Capitals = dict([("Russia", "Moscow"), ("Ukraine", "Kiev"), ("USA", "Washington")]) Capitals = dict(zip(["Russia", "Ukraine", "USA"], ["Moscow", "Kiev", "Washington"])) Алғашқы екі әдісті олардың барлық элементтерін тізіп, шағын сөздіктер жасау үшін ғана қолдануға болады. Сонымен қатар, екінші әдіспен кілттер dict функциясының аталған параметрлері ретінде беріледі, сондықтан бұл жағдайда кілттер дұрыс сәйкестендіргіштер болып табылатын жолдар ғана бола алады. Үшінші және төртінші жағдайда, егер сіз барлық элементтерді тізімдеу арқылы міндетті түрде алуға болатын дайын тізімдерді дәлел ретінде берсеңіз, үлкен сөздіктер жасай аласыз, бірақ бағдарламаның орындалу барысында кез-келген басқа жолмен құрылуы мүмкін. Dict функциясының үшінші әдісінде әр элементі екі элементтен тұратын тізімді беру керек: кілт және мәндер. Төртінші әдіс zip функциясын қолданады, ол бірдей ұзындықтың екі тізімін береді: кілттер тізімі және мәндер тізімі. Сөздік элементтерімен жұмыс Негізгі операция: элемент мәнін кілт арқылы алу тізімдер үшін бірдей жазылады: a[key]. Егер берілген кілті бар элемент сөздікте болмаса, онда KeyError ерекшелік бар. Негізгі мәнді анықтаудың тағы бір тәсілі - get әдісі: A. get(key). Егер get кілті бар элемент сөздікте болмаса, онда None мәні қайтарылады. Екі аргументті жазу түрінде A. get(key, val), егер key кілті бар элемент сөздікте болмаса, әдіс val мәнін қайтарады. Сіз элементтің сөздікке жататындығын жиындар сияқты In және not in операцияларымен тексере аласыз. < br> сөздікке жаңа элемент қосу үшін оған қандай да бір мән беру керек: a[key] = мән. Сөздіктен элементті жою үшін del a[key] операциясын пайдалануға болады (егер сөздікте мұндай кілт болмаса, операция KeyError-ді алып тастайды. Міне, сөздіктен элементті жоюдың екі қауіпсіз әдісі. Элементтің болуын алдын-ала тексеру әдісі: if key in A: del A[key] Алып тастауды ұстау және өңдеу тәсілі: try: del A[key] except KeyError: pass Сөздіктен элементті жоюдың тағы бір әдісі: pop әдісін қолдану: A. pop (key). Бұл әдіс жойылған элементтің мәнін қайтарады, егер осы кілт бар элемент сөздікте болмаса, ерекшелік пайда болады. Егер pop әдісіне екінші параметр берілсе, онда сөздікте элемент болмаса, pop әдісі осы параметрдің мәнін қайтарады. Бұл сөздіктен элементті қауіпсіз жоюды ұйымдастыруға мүмкіндік береді: A. pop(key, None). Сөздік элементтерін санау Сөздіктегі барлық элементтердің кілттерін іздеуді оңай ұйымдастыруға болады: for key in A: print(key, A[key]) Келесі әдістер сөздік элементтерінің көріністерін қайтарады. Көріністер жиындарға ұқсас, бірақ егер сіз сөздік элементтерінің мәндерін өзгертсеңіз, олар өзгереді. Keys әдісі барлық элементтердің кілттерінің көрінісін қайтарады, values әдісі барлық мәндердің көрінісін қайтарады, ал items әдісі кілттер мен мәндерден барлық жұптардың (кортеждердің) көрінісін қайтарады. Тиісінше, егер Val мәні a сөздік элементтерінің барлық мәндерінің арасында келесідей болатындығын тез тексеруге болады: val in A. values (), ал циклды key айнымалысында элементтің кілті болатындай етіп ұйымдастырыңыз, ал val айнымалысында оның мәні келесідей болуы мүмкін: for key, val in A.items(): print(key, val) АРАЛАС МАҒЫНАЛАРЫ БАР СӨЗДІКТЕР Сөздіктер тек жолдардан ғана тұрмауы мүмкін. Сөздіктердің мағыналары кез-келген түрде болуы мүмкін, оның ішінде тұтас, логикалық, ерікті нысандар немесе тіпті басқа сөздіктер. Ал бір сөздіктегі мағыналар бірдей болуы керек емес; оларды қажет болғанша араластырып, біріктіруге болады. Сөздік кілттері шектеулі, бірақ олар жолдар, бүтін сандар және басқа да түрлер болуы мүмкін. Әр түрлі типтегі кілттерді бір сөздікте араластырып, біріктіруге болады. Сөздікте тізімдерді сақтау мысалы >>> SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], … 1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']} >>> len(SUFFIXES) #1 2 >>> 1000 in SUFFIXES #2 True >>> SUFFIXES[1000] #3 ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] >>> SUFFIXES[1024] #4 ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'] >>> SUFFIXES[1000][3] #5 'TB' 1)Тізімдер мен жиындар үшін len () функциясы сөздік элементтерінің санын қайтарады. 2)Тізімдер мен жиындар сияқты, сөздікте нақты кілт анықталғанын тексеру үшін in операторын қолдануға болады. 3)1000-SUFFIXES сөздігінің кілті; оның мәні — сегіз элементтің тізімі (дәлірек айтсақ, сегіз жол). 4)Сол сияқты, 1024 — SUFFIXES сөздігінің кілті; және оның мәні сегіз элементтің тізімі болып табылады. 5)SUFFIXES[1000 ] тізім болғандықтан, тізімдегі жеке элементтерге нөлден индекстелген реттік нөмірлері бойынша жүгінуге болады. Деректерді_енгізу_Стандартты_енгізуден_жолды_оқу_үшін_input()'>Python енгізу-шығару Деректерді енгізу Стандартты енгізуден жолды оқу үшін input(),ол пернетақтадан жолды оқиды және айнымалыға бірден тағайындауға болатын оқылған жолдың мәнін қайтарады: a = input() b = input() Рас, input функциясы мәтін жолын қайтарады. Егер айнымалылардың бүтін мәндері болуы керек болса, онда оқу кейін бірден int фунцкиясының көмегімен типтерді түрлендіруді орындаңыз және жаңа мәндерді A және B айнымалыларына жазыңыз: a = int(a) b = int(b) Input функциясы қайтарылатын мән үшін int функциясын шақырса, жолдарды оқу мен түрді түрлендіруді біріктіруге болады(): a = int(input()) b = int(input()) Жеке жолда жазылған болса, айнымалылардың мәндерін есептеу қиын. Мұнда есептелген жолға әдіс қолдану керек split(), ол жолды бір немесе екі бос орын бойынша бөліктерге бөледі. Содан кейін бұл функцияның нәтижесі екі немесе бірнеше саннан кортежге беріледі. Мысалы, егер жолда бос орын арқылы екі Сан енгізілсе, онда оларды осылай есептеуге болады: a, b = input().split() a = int(a) b = int(b) Сол сияқты, үш айнымалыны қосу операторының сол жағында үш айнымалыдан кортеж жазу арқылы есептеуге болады: a, b, c = input().split() Сондай-ақ, тізімнің әрбір элементіне берілген функцияны қолданатын map функциясын пайдалансаңыз, санаулы мәндерді сандық түрге (мысалы, int) бірден түрлендіруге болады (int түріне түрлендіру үшін, тиісінше, әрбір элементке қолдану үшін int функциясын орнату қажет). Бастау үшін бұл құрылымды есте сақтауға болады: a, b, c = map(int, input().split()) Деректерді шығару Деректерді шығару үшінprint айнымалы мәндерді ғана емес, кез келген өрнектердің мәнін де шығара алады. Мысалы, жазуға боладыprint(2 + 2 ** 2). Сондай-ақ, print көмегімен бір емес, бірнеше өрнектің мәнін шығаруға болады, бұл үшін оларды үтір арқылы тізімдеу керек: a = 1 b = 2 print(a, '+', b, '=', a + b) Бұл жағдайда 1 + 2 = 3 мәтін басылады: алдымен a айнымалысының мәні шығарылады, содан кейін " + "белгісінен жол, содан кейін B айнымалысының мәні, содан кейін" = " белгісінен жол, соңында a + b сомасының мәні. Шығарылатын мән бір бос орынмен бөлінетінін ескеріңіз. Бірақ мұндай мінез-құлықты өзгертуге болады: шығарылатын мәндерді екі бос орынмен, кез келген басқа символмен, кез келген басқа жолмен бөлуге, оларды бөлек жолдарда шығаруға немесе бөлуге болмайды. Ол үшін print функциясы деп аталатын арнайы атаулы параметрді жіберу керек sep, бөлгіш ретінде пайдаланылатын жолға тең (sep — separator сөзінің аббревиатурасы, яғни бөлгіш). Әдепкі бойынша, sep параметрі бір бос орынның жолына тең және мәндер арасында бос орын шығады. Бөлгіш ретінде пайдалану үшін, мысалы, қос нүкте таңбасын жолға тең sep параметрін жіберу керек ‘:’: print(a, b, c, sep = ':') Сол сияқты, бөлгішті толығымен алып тастау үшін, бос жолға тең sep параметрін жіберу керек: print(a, '+', b, '=', a + b, sep = '') Мәндерді жаңа жолдан шығару үшін, sep параметрі ретінде жаңа жолдың арнайы таңбасынан тұратын жолды жіберу керек: print(a, b, sep = '\n') Мәтіндік жолдардағы кері слэш символы одан кейін қандай символ жазылуына байланысты арнайы символды белгілеу болып табылады. Ең жиі жаңа жолдың символы қолданылады ‘\n’. Жолға кері слэш символын қою үшін оны екі рет қайталау керек: ‘\\’. Printf функциясының екінші пайдалы параметрі end, параметрі болып табылады, ол print функциясында көрсетілген барлық мәндерді шығарғаннан кейін шығарылады. Әдепкі бойынша end параметрі '\n' тең, яғни келесі қорытынды жаңа жолдан шығады. Сондай-ақ, бұл параметрді түзетуге болады, мысалы, барлық қосымша шығарылған таңбаларды алып тастау үшін print функциясын осылайша шақыруға болады: print(a, b, c, sep = '', end = '') |