ตารางแฮช Dict
โครงสร้างตารางแฮชคีย์/ค่าที่มีประสิทธิภาพของ Python เรียกว่า "dict" คุณสามารถเขียนเนื้อหาของดิกต์เป็นชุดคู่คีย์:ค่าภายในวงเล็บปีกกา { } เช่น dict = {key1:value1, key2:value2, ... } ส่วน "ดิกต์ว่าง" เป็นเพียงวงเล็บปีกกาคู่ว่าง {}
การค้นหาหรือกำหนดค่าในคำสั่งจะใช้วงเล็บเหลี่ยม เช่น dict['foo'] จะค้นหาค่าภายใต้คีย์ "foo" สตริง ตัวเลข และทูเบิลสามารถใช้เป็นคีย์ได้ และทุกประเภทสามารถเป็นค่าได้ ส่วนประเภทอื่นๆ อาจทำงานอย่างไม่ถูกต้องเป็นคีย์ (สตริงและ tuple ทำงานได้อย่างสมบูรณ์เนื่องจากจะเปลี่ยนแปลงไม่ได้) การค้นหาค่าที่ไม่ได้อยู่ใน dict จะแสดง KeyError ให้ใช้ "in" เพื่อตรวจสอบว่าคีย์อยู่ใน dict หรือจะใช้ dict.get(key) ซึ่งส่งคืนค่า หรือ "ไม่มี" หากไม่มีคีย์ (หรือ get(key, not-found) ช่วยให้คุณสามารถระบุค่าที่จะส่งคืนในกรณีที่ไม่พบ)
## Can build up a dict by starting with the empty dict {} ## and storing key/value pairs into the dict like this: ## dict[key] = value-for-that-key dict = {} dict['a'] = 'alpha' dict['g'] = 'gamma' dict['o'] = 'omega' print(dict) ## {'a': 'alpha', 'o': 'omega', 'g': 'gamma'} print(dict['a']) ## Simple lookup, returns 'alpha' dict['a'] = 6 ## Put new key/value into dict 'a' in dict ## True ## print(dict['z']) ## Throws KeyError if 'z' in dict: print(dict['z']) ## Avoid KeyError print(dict.get('z')) ## None (instead of KeyError)
โดยค่าเริ่มต้น ลูปในพจนานุกรมจะทำซ้ำตามแป้นของพจนานุกรม คีย์จะปรากฏในลำดับที่กำหนดเอง เมธอด dict.keys() และ dict.values() จะแสดงรายการคีย์หรือค่าอย่างชัดเจน นอกจากนี้ยังมี items() ที่แสดงรายการของ tuples (คีย์, ค่า) ซึ่งเป็นวิธีที่มีประสิทธิภาพที่สุดในการตรวจสอบข้อมูลคีย์-ค่าทั้งหมดในพจนานุกรม รายการทั้งหมดนี้สามารถส่งผ่านไปยังฟังก์ชัน Sort()
## By default, iterating over a dict iterates over its keys. ## Note that the keys are in a random order. for key in dict: print(key) ## prints a g o ## Exactly the same as above for key in dict.keys(): print(key) ## Get the .keys() list: print(dict.keys()) ## dict_keys(['a', 'o', 'g']) ## Likewise, there's a .values() list of values print(dict.values()) ## dict_values(['alpha', 'omega', 'gamma']) ## Common case -- loop over the keys in sorted order, ## accessing each key/value for key in sorted(dict.keys()): print(key, dict[key]) ## .items() is the dict expressed as (key, value) tuples print(dict.items()) ## dict_items([('a', 'alpha'), ('o', 'omega'), ('g', 'gamma')]) ## This loop syntax accesses the whole dict by looping ## over the .items() tuple list, accessing one (key, value) ## pair on each iteration. for k, v in dict.items(): print(k, '>', v) ## a > alpha o > omega g > gamma
หมายเหตุเกี่ยวกับกลยุทธ์: จากมุมมองด้านประสิทธิภาพ พจนานุกรมเป็นเครื่องมือที่ยอดเยี่ยมที่สุดอย่างหนึ่งของคุณ และคุณควรใช้พจนานุกรมเป็นวิธีง่ายๆ ในการจัดระเบียบข้อมูล ตัวอย่างเช่น คุณอาจอ่านไฟล์บันทึกที่แต่ละบรรทัดขึ้นต้นด้วยที่อยู่ IP และจัดเก็บข้อมูลลงในคำสั่งโดยใช้ที่อยู่ IP เป็นคีย์ และรายการของบรรทัดที่ปรากฏเป็นค่า เมื่อคุณอ่านข้อมูลในไฟล์ทั้งไฟล์แล้ว คุณจะสามารถค้นหาที่อยู่ IP และดูรายการบรรทัดของที่อยู่นั้นได้ทันที พจนานุกรมจะเก็บข้อมูลที่กระจัดกระจายไปทำให้เข้ากันได้
การจัดรูปแบบตามคำบอก
โอเปอเรเตอร์ % ทำงานได้อย่างสะดวกเพื่อแทนที่ค่าจากดิกชันเป็นสตริงตามชื่อ
h = {} h['word'] = 'garfield' h['count'] = 42 s = 'I want %(count)d copies of %(word)s' % h # %d for int, %s for string # 'I want 42 copies of garfield' # You can also use str.format(). s = 'I want {count:d} copies of {word}'.format(h)
Del
โอเปอเรเตอร์ "del" จะทำการลบ ในกรณีที่ง่ายที่สุด อาจเป็นการนำคำจำกัดความของตัวแปรออก เสมือนว่าไม่มีการกำหนดตัวแปรนั้นไว้ นอกจากนี้ ยังใช้ Del กับองค์ประกอบรายการหรือสไลซ์เพื่อลบส่วนนั้นของรายการและลบรายการจากพจนานุกรมได้ด้วย
var = 6 del var # var no more! list = ['a', 'b', 'c', 'd'] del list[0] ## Delete first element del list[-2:] ## Delete last two elements print(list) ## ['b'] dict = {'a':1, 'b':2, 'c':3} del dict['b'] ## Delete 'b' entry print(dict) ## {'a':1, 'c':3}
Files
ฟังก์ชัน open() จะเปิดขึ้นและแสดงผลการจัดการไฟล์ที่สามารถใช้อ่านหรือเขียนไฟล์ตามปกติ โค้ด f = open('name', 'r') จะเปิดไฟล์เป็นตัวแปร f ซึ่งพร้อมสำหรับการอ่านและใช้ f.close() เมื่อเสร็จสิ้น แทนที่จะใช้ "r" ให้ใช้ "w" ในการเขียน และใช้ "a" เพื่อต่อท้าย มาตรฐานแบบวนซ้ำใช้ได้กับไฟล์ข้อความ โดยทำซ้ำผ่านบรรทัดของไฟล์ (ใช้ได้เฉพาะกับไฟล์ข้อความ ไม่ใช่ไฟล์ไบนารี) เทคนิค For-loop เป็นวิธีที่ง่ายและมีประสิทธิภาพในการดูบรรทัดทั้งหมดในไฟล์ข้อความ ดังนี้
# Echo the contents of a text file f = open('foo.txt', 'rt', encoding='utf-8') for line in f: ## iterates over the lines of the file print(line, end='') ## end='' so print does not add an end-of-line char ## since 'line' already includes the end-of-line. f.close()
การอ่านทีละบรรทัดก็มีคุณภาพดีที่ไฟล์บางไฟล์ไม่จำเป็นต้องใส่ลงในหน่วยความจำในครั้งเดียว มีประโยชน์หากคุณต้องการดูทุกบรรทัดในไฟล์ขนาด 10 กิกะไบต์โดยไม่ต้องใช้หน่วยความจำ 10 กิกะไบต์ เมธอด f.readlines() จะอ่านทั้งไฟล์ลงในหน่วยความจำและแสดงผลเนื้อหาเป็นรายการบรรทัด เมธอด f.read() จะอ่านทั้งไฟล์เป็นสตริงเดียว ซึ่งอาจเป็นวิธีที่สะดวกในการจัดการกับข้อความทั้งหมดในคราวเดียว เช่น ด้วยนิพจน์ทั่วไปที่เราจะเห็นในภายหลัง
สำหรับการเขียน เมธอด f.write(string) เป็นวิธีที่ง่ายที่สุดในการเขียนข้อมูลลงในไฟล์เอาต์พุตที่เปิดอยู่ หรือใช้ "พิมพ์" กับไฟล์ที่เปิดอยู่ เช่น "print(string, file=f)" ได้
ยูนิโค้ดไฟล์
หากต้องการอ่านและเขียนไฟล์ที่เข้ารหัส Unicode ให้ใช้โหมด "t" และระบุการเข้ารหัสอย่างชัดเจน ดังนี้
with open('foo.txt', 'rt', encoding='utf-8') as f: for line in f: # here line is a *unicode* string with open('write_test', encoding='utf-8', mode='wt') as f: f.write('\u20ACunicode\u20AC\n') # €unicode€ # AKA print('\u20ACunicode\u20AC', file=f) ## which auto-adds end='\n'
พัฒนาการที่เพิ่มขึ้นของการออกกำลังกาย
การสร้างโปรแกรม Python ไม่ใช่เขียนข้อมูลทั้งหมดในขั้นตอนเดียว ให้ระบุแค่เป้าหมายแรก เช่น "ขั้นตอนแรกคือการแยกรายการคำ" เขียนโค้ดเพื่อให้บรรลุเป้าหมายนั้น และพิมพ์โครงสร้างข้อมูลของคุณ ณ จุดนั้น จากนั้นคุณจะสามารถทำ sys.exit(0) เพื่อให้โปรแกรมไม่เดินหน้าไปสู่ส่วนที่ยังทำไม่เสร็จ เมื่อโค้ดไมล์สโตนใช้งานได้แล้ว คุณจะสามารถเขียนโค้ดสำหรับความสำเร็จถัดไปได้ การที่สามารถพิจารณาตัวแปรที่พิมพ์ออกมาในสถานะหนึ่งจะช่วยให้คุณคิดหาวิธีเปลี่ยนตัวแปรเหล่านั้นเพื่อก้าวสู่สถานะถัดไป Python นั้นทำงานเร็วมากเมื่อใช้รูปแบบนี้ ทำให้คุณสามารถทำการเปลี่ยนแปลงเล็กน้อยและเรียกใช้โปรแกรมเพื่อดูวิธีการทำงาน ใช้ประโยชน์จากการดำเนินการที่รวดเร็วนั้นเพื่อสร้างโปรแกรมด้วยขั้นตอนเพียงเล็กน้อย
แบบฝึกหัด: wordcount.py
การรวมเนื้อหา Python พื้นฐานทั้งหมดเข้าด้วยกัน เช่น สตริง รายการ การพิมพ์ คำสั่ง ไฟล์ ลองทำแบบฝึกหัด wordcount.py แบบสรุปในแบบฝึกหัดพื้นฐาน