7. โครงสร้างข้อมูล

Data Collections

https://drive.google.com/file/d/1Zzn16gqepvZcDD8MHUyl7CIC5ZZCqBYa/view?usp=sharing

7.1. จุดประสงค์รายสัปดาห์

  1. ใช้ list เพื่อเรียกฟังก์ชันและจัดเก็บข้อมูลตามที่กำหนดให้ได้

  2. เขียนโปรแกรมเพื่อใช้ list เพื่อจัดการข้อมูลตามที่กำหนดให้ได้

  3. อธิบายข้อมูลประเภท dictionary และประโยชน์ใช้งานได้

  4. ใช้ dict เพื่อเรียกฟังก์ชันและจัดเก็บข้อมูลตามที่กำหนดให้ได้

  5. อธิบายข้อมูลประเภท set และประโยชน์ใช้งานได้

  6. ใช้ set เพื่อเรียกฟังก์ชันและจัดเก็บข้อมูลตามที่กำหนดให้ได้

7.2. ที่มาของโครงสร้างข้อมูล

โปรแกรมส่วนใหญ่ในปัจจุบันต้องประมวลผลข้อมูลจำนวนมากเพื่อนำเสนอข้อมูลทางสถิติต่อผู้ใช้ ไม่ว่าจะเป็น

  • โปรแกรม word เช่น จำนวนคำ บรรทัด จำนวนหน้า นับ link เป็นต้น

  • โปรแกรม หรือเว็บไซต์ นำเสนอข้อมูลทางสถิติ ของนักศึกษา

  • โปรแกรม ประมวลผลและสรุปข้อมูลงานวิจัย

  • โปรแกรม สรุปข้อมูล ลูกค้าของร้านค้า

  • ข้อมูลการแพ้ชนะ หรือ progress ของผู้เล่นในเกมส์

7.3. ตัวอย่าง

7.3.1. การคำนวณทางสถิติเบื้องต้น - ค่าเฉลี่ย

ผลรวม = 0.0
จำนวนคะแนน = int(input("กรอกจำนวนคะแนน >> "))
for i in range(จำนวนคะแนน):
    คะแนน = float(input("กรอกคะแนน: "))
    ผลรวม = ผลรวม + คะแนน
print(f"ค่าเฉลี่ยคือ {ผลรวม/จำนวนคะแนน}")

โปรแกรมข้างบนจะให้ผู้ใช้กรอกคะแนนไปเรื่อยๆ โดยค่าของ คะแนน จะเปลี่ยนไปเรื่อยๆ ตามค่าที่ผู้ใช้กรอก การเขียนโปรแกรมโดยไม่เก็บค่าที่ผู้ใช้กรอกนั้นสามารถใช้คำนวณ ค่าเฉลี่ยได้ แต่จะไม่เหมาะกับการคำนวณค่าทางสถิติอื่นๆ เช่น median variance หรือ standard deviation

7.3.2. median: ค่ากลาง

ค่ากลาง หมายถึงค่ากลางที่เมื่อเรียงลำดดับชุดข้อมูลแล้วจะเป็นค่าที่แบ่งชุดข้อมูลออกเป็นส่วนเท่าๆกัน

example

2,4,6,9,13 มีค่า median เป็น 6

2,3,5,7,10,11 มีค่า median เป็น (5+7)/2

การหาค่ากลาง

  • เรียงลำดับชุดข้อมูล

  • median จะอยู่ตำแหน่งตรงกลางของชุดข้อมูล

  • ถ้าชุดข้อมูลนั้นมีจำนวนคี่ ค่าของ median จะอยู่ที่ตำแหน่ง size/2

  • ถ้าชุดข้อมูลมีจำนวนคู่ ค่าของ median จะเป็นค่าเฉลี่ยระหว่าง size/2 - 1 และ size/2

7.3.3. Standard Deviation

ค่าเบี่ยงเบนมาตรฐาน หรือ standard deviation \(\sigma\) เป็นการคำนวณค่าวัดการกระจายแบบหนึ่งของชุดข้อมูล

  • ถ้าข้อมูลส่วนใหญ่มีค่าใกล้เคียงกับค่าเฉลี่ย \(\sigma\) จะมีค่าน้อย

  • ถ้าข้อมูลส่วนใหญ่มีค่าห่างจากค่าเฉลี่ยมาก (กระจายมาก) \(\sigma\) จะมีค่ามาก

สมการคำนวณหาค่าเบี่ยงเบนมาตรฐาน

\[s = \sqrt{ \frac{ \sum{(\bar{x} - x_i )^2} }{n-1} }\]

เมื่อ

  • \(\bar{x}\) เป็น ค่าเฉลี่ยของชุดข้อมูล

  • \(x_i\) เป็น ค่าของข้อมูลตำแหน่งที่ \(i\)

  • \(n\) เป็น จำนวนข้อมูลทั้งหมด

  • \(\bar{x} - x_i\) เรียกว่า "deviation"

  • \((\bar{x}-x_i)^2\) is square of "deviation"

7.3.4. ตัวอย่างการคำนวณ

กำหนดชุดข้อมูล \(2,4,5,8,11\) จงคำนวณหา standard deviation

\[\begin{split}n = 5 \\ x_0, x_1, x_2, x_3, x_4 = 2, 4, 5, 8, 11 \\ \bar{x} = \frac{x_0 + x_1 + x_2 + x_3 + x_4} {5} = \frac{ 2 + 4 + 5 + 8 + 11 } { 5 } = \frac{30}{5} = 6.0 \\\end{split}\]

ดังนั้น

\[\begin{split}s = \sqrt{ \frac{ \sum{(\bar{x} - x_i )^2} }{n-1} } \\ s = \sqrt{ \frac{ (\bar{x}-x_0)^2 + (\bar{x}-x_1)^2 + (\bar{x}-x_2)^2 + (\bar{x}-x_3)^2 + (\bar{x}-x_4)^2 } {n-1} } \\ s = \sqrt{ \frac{ (6.0-2)^2 + (6.0-4)^2 + (6.0-5)^2 + (6.0-8)^2 + (6.0-11)^2 } {5-1} } \\ s = \sqrt{ \frac{ (4)^2 + (2)^2 + (1)^2 + (-2)^2 + (-5)^2 } {4} } \\ s = \sqrt{ \frac{ 16 + 4 + 1 + 4 + 25 } {4} } \\ s = \sqrt{ \frac{ 16 + 4 + 1 + 4 + 25 } {4} } \\ s = \sqrt{ \frac{ 50 } {4} } \\ s = \sqrt{ 12.5 } \\ s = 3.5355339059327378\end{split}\]

เนื่องจากการคำนวณหาค่าของ standard deviation นั้นจำเป็นต้องใช้ค่าเฉลี่ย \(\bar{x}\) มาหาผลต่างกับค่าแต่ละตัวที่ผู้ใช้กรอกดังนั้นจึงควรเก็บแต่ละค่าของ \(x_i\) ไว้

ในบทนี้จะกล่าวถึงการเก็บข้อมูลเป็นชุดแบบต่างๆ พร้อมวิธีการเข้าถึง และนำข้อมูลในชุดข้อมูลมาประมวลผล

7.4. ลำดับ - Tuple และ List

การเก็บข้อมูลเป็นลำดับ (sequence) ของข้อมูล \(S = s_0, s_1, s_2, s_3, ..., s_{n-1}\) โดยข้อมูลแต่ละค่า(สมาชิก)มีตำแหน่งชัดเจน

เมื่อต้องการเก็บข้อมูลแบบลำดับในภาษา Python เราสามารถใช้ข้อมูล 2 ประเภทได้แก่ tuple และ list

7.4.1. ตัวอย่าง 1

คณิตศาสตร์

\[a = 3, 9, 7, 5, 4\]

Python

# tuple
a = (3, 9, 7, 5, 4)
z = ( )

# list
b = [ 3, 9, 7, 5, 4 ]
x = [ ]

7.4.2. ตัวอย่าง 2

Python

n = ('P','a','u','l',' ','P','h','o','e','n','i','x')
m = ['P','a','u','l',' ','P','h','o','e','n','i','x']

ข้อสังเกต

โดยปกติแล้วถ้าเราต้องการ ลำดับ (sequence) ของ ข้อความ str เราจะใช้ str แทน เพราะ?

n = ('P','a','u','l',' ','P','h','o','e','n','i','x')
m = ['P','a','u','l',' ','P','h','o','e','n','i','x']
s = 'Paul Phoenix'

print( type(n), type(m), type(s) ) # <-- นี่ก็ tuple

7.4.3. การเข้าถึงข้อมูลในลำดับ (sequence)

เราสามารถเข้าถึงสามาชิกที่ i ของลำดับ (sequence) s โดยใช้ s[i] เพื่อการอ่านค่า และเปลี่ยนค่า

การอ่านค่า (access)

x = (3, 9, 7, 5, 4)
y = [3, 9, 7, 5, 4, 7, 3, 2]

print( x[3] )   # 5
print( x[-1] )  # 4

print( y[-1] )
print( x[2]*y[2] )
print( x[-2]**y[-1] )

เปลี่ยนค่า (access)

x = (3, 9, 7, 5, 4)
y = [3, 9, 7, 5, 4, 7, 3, 2]

x[0] = 3*9 # <--- Error

y[0] = 4**2 + 5
y[5] = x[-1]**2 + x[3] - y[5]

การลบค่าโดยระบุตำแหน่ง (delete)

y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del y[0]
print( y )

del y[-1]
print( y )

del y[2:5]
print( y )

7.4.3.1. ข้อแตกต่าง tuple - list

ข้อมูลใน tuple ไม่สามารถเปลี่ยนค่าได้

7.5. ฟังก์ชันและการใช้งาน list

a = [2,4,5,8,11]

7.5.1. 1. ฟังก์ชันพื้นฐาน

จำนวนสมาชิก

len(a)

การรวมตัวเลขลำดับ

sum(a)

การเพิ่มสมาชิก 1 ค่า

a = [ 'Andy', 'Betty', 'Cathy' ]
a.append( 'Dorothy' )

gpas = [ 2.33, 3.44, 3.22, 2.99 ]
gpas.append( 3.95 )

การเพิ่มสมาชิกจากลำดับอื่น

a = [ 'Andy', 'Betty', 'Cathy' ]
a.extend( ['Dorothy', 'Eddy', 'Franky'] )

gpas = [ 2.33, 3.44, 3.22, 2.99 ]
gpas.extend( [3.95, 2.75, 2.97, 3.50] )

7.5.2. 2. การสร้างลำดับ

แบบระบุสมาชิกทีละค่า

a = [ 2, 3, 4, 6 ]

แบบระบุสมาชิกซ้ำ n ค่า

b = [ 1 ] * 5
z = [ 0 ] * 10

สร้างลำดับจากฟังก์ชัน range()

ค่าเริ่มต้น = 1
ค่าสิ้นสุด = 100
เพิ่มทีละ = 3
c = list( range(ค่าเริ่มต้น, ค่าสิ้นสุด, เพิ่มทีละ) )

7.5.3. 3. การตรวจสอบว่า x เป็นสมาชิกของลำดับ a หรือไม่

print( x in a )

ลำดับของรหัสนศ = [ 61111111, 6111233, 61113333, 61443433, 61221122 ]
print( 61443433 in a )

วิทย์คอม61 = [ 'ป้อม', 'แคท', 'นัฐ', 'สาว', 'ชาย', 'ฟิวส์' ]
print( 'Paul' in วิทย์คอม61 )
truefalse = 'ชาย' in วิทย์คอม61
print( truefalse )
print( 'แคท' in วิทย์คอม61 )

7.5.4. 4. การแสดงข้อมูลในลำดับ

for x in a:
    print(x)

อ่านว่า

สำหรับค่า x แต่ละค่าที่อยู่ในในลำดับ a:
    แสดงค่า x
for x in a:
    print(f'{x} {x**2} {x**3}')

อ่านว่า

สำหรับค่า x แต่ละค่าที่อยู่ในลำดับ a:
    แสดงค่า {x} {x^2} {x^3}

หรือใช้ชื่อตัวแปรเป็นภาษาไทย

ลำดับของคะแนน = [3.25, 7.55, 8.6, 4.33, 7.26, 8.10]
for คะแนน in ลำดับของคะแนน:
    print(f'{คะแนน}')

7.5.5. 5. การแสดงค่าตำแหน่งและข้อมูลในแต่ละตำแหน่ง

for i in range(len(a)):
    print(f'ตำแหน่ง {i} มีข้อมูล {a[i]}')

หรือใช้ชื่อเป็นภาษาไทยได้ดังนี้

ลำดับ = [ 1, 4, 9, 7, 5, 3, 6, 10, 8 ]
for ตำแหน่ง in range(len(ลำดับ)):
    print(f'ตำแหน่ง {ตำแหน่ง} มีข้อมูล {ลำดับ[ตำแหน่ง]}')

7.5.6. 6. การแบ่งข้อมูลในลำดับออกเป็นช่วงค่า

ลำดับเกรดเฉลี่ย = [ 2.55, 3.25, 3.44, 4.00, 3.23, 3.11, 2.55 ]
ตำแหน่งเริ่มต้น = 2
ตำแหน่งสิ้นสุด = 6
เพิ่มขึ้นทีละ = 1
print( ลำดับเกรดเฉลี่ย[ตำแหน่งเริ่มต้น : ตำแหน่งสิ้นสุด : เพิ่มขึ้นทีละ] )


gpas = [ 2.55, 3.25, 3.44, 4.00, 3.23, 3.11, 2.55 ]
s = 2
e = 6
i = 1
print( gpas[s:e:i] )

7.5.7. 7. การหาผลรวมโดยการสะสม

total = 0
for x in a:
    total = total + x

หรือใช้ชื่อตัวแปรเป็นภาษาไทย

ลำดับของคะแนน = [3.25, 7.55, 8.6, 4.33, 7.26, 8.10]
ผลรวมของคะแนน = 0
for คะแนน in ลำดับของคะแนน:
    ผลรวมของคะแนน = ผลรวมของคะแนน + x
print(f'ผลรวมของคะแนน = {ผลรวมของคะแนน}')

7.6. โปรแกรมหา stdev ด้วย list

โจทย์

กำหนดชุดข้อมูล \(2,4,5,8,11\) จงคำนวณหา standard deviation

Solution

สมการคำนวณหาค่าเบี่ยงเบนมาตรฐาน

\[s = \sqrt{ \frac{ \sum{(\bar{x} - x_i )^2} }{n-1} }\]

7.6.1. 1. หาผลลัพธ์ด้วยวิธีสะสมผลต่างยกกำลังสอง

from math import sqrt
x = [2,4,5,8,11]
n = len(x)
xbar = sum(x)/len(x)
total = 0.0
for xi in x:
    total += (xbar - xi)**2
    #total = total + (xbar - xi)**2

stdev = sqrt( total/(n-1) )

7.6.2. 2. หาผลลัพธ์ด้วยวิธีเก็บผลต่างยกกำลังสองไว้ใน list

from math import sqrt
x = [2,4,5,8,11]
n = len(x)
xbar = sum(x)/len(x)
total = [ ]
for xi in x:
    total.append( (xbar - xi)**2 )

stdev = sqrt( sum(total)/(n-1) )

7.6.3. 3. การเขียนเป็นฟังก์ชัน

def stdev(x):
    n = len(x)
    xbar = sum(x)/len(x)
    total = [ ]
    for xi in x:
        total.append( (xbar - xi)**2 )

    return sqrt( sum(total)/(n-1) )

7.6.4. 4. การเรียกใช้ฟังก์ชัน

x = [2,4,5,8,11]

print( stdev(x) )

print( stdev([1,2,3,4,5,6,7,8,9,10]) )

ลำดับของคะแนน = [3, 4, 3, 9, 8, 7, 6, 4, 5, 3, 2]

print( f'stdev ของลำดับคะแนน = {stdev(ลำดับของคะแนน)}' )

7.7. ฟังก์ชันอื่นๆ ใน list

ฟังก์ชัน

ความหมาย

a.append(x)

เพิ่มสมาชิก x ต่อท้าย ลำดับ a

a.sort()

เรียงลำดับสมาชิกใน ลำดับ a

a.reverse()

สลับลำดับจากหลังไปหน้า

a.index(x)

บอกตำแหน่งค่า x ว่าอยู่ลำดับที่เท่าไหร่ใน a

a.insert(i, x)

ใส่ค่า x ในตำแหน่งที่ i ของลำดับ a

a.count(x)

นับว่ามีค่า x ทั้งหมดกี่ค่าใน ลำดับ a

a.remove(x)

ลบ x แรกที่เจอในลำดับ 'a' ออก

a.pop(x)

ลบ x แรกที่เจอในลำดับ 'a' ออก

ตัวอย่างการใช้งาน

a = [3, 1, 4, 1, 5, 9]
a.append(2)
print(a)

a.sort()
print(a)

a.reverse()
print(a)

print( a.index(4) )

a.insert(4, "Hello")

print( a.count(1) )

a.remove(1)
print( a )

print( a.pop(3) )

print( a )

7.7.1. การหาค่ากลาง (median)

นิยาม

ค่ากลาง หมายถึงค่ากลางที่เมื่อเรียงลำดดับชุดข้อมูลแล้วจะเป็นค่าที่แบ่งชุดข้อมูลออกเป็นส่วนเท่าๆกัน

example

2,4,6,9,13 มีค่า median เป็น 6

2,3,5,7,10,11 มีค่า median เป็น (5+7)/2

การหาค่ากลาง

  • เรียงลำดับชุดข้อมูล

  • median จะอยู่ตำแหน่งตรงกลางของชุดข้อมูล

  • ถ้าชุดข้อมูลนั้นมีจำนวนคี่ ค่าของ median จะอยู่ที่ตำแหน่ง size/2

  • ถ้าชุดข้อมูลมีจำนวนคู่ ค่าของ median จะเป็นค่าเฉลี่ยระหว่าง size/2 - 1 และ size/2

def median(a):
    a.sort()
    size = len(a)
    mid = size // 2
    if size % 2 == 0:
        median = (nums[midPos] + nums[midPos - 1])/2
    else:
        median = nums[midPos]

    return median

7.7.1.1. การเรียกใช้ median()

def inputGPAs():
    gpas = []
    n = int(input('จำนวน gpa ที่จะกรอก = '))
    for i in range(n):
        gpas.append(input(' gpa {i} = '))

    return gpas

gpas = inputGPAs()
med = median(gpas)
print(f'ค่ากลางคือ {med}')

7.7.2. ลำดับของลำดับ

7.7.2.1. 1. การสร้าง

a = [ ]

students = [
    [ 'Andy', 3.34, 20],
    [ 'Cathy', 2.23, 19],
    [ 'Betty', 3.55, 21],
    [ 'Dorothy', 3.10, 20]
]

7.7.2.2. 2. การเพิ่ม

a.append( [2, 3, 4, 7] )
a.append( [5, 3, 6] )
print( a )

students.append( ['Henry', 3.95, 19] )
students.append( ['Franky', 3.43, 20] )

students.extend( [
    ['Eddy', 3.25, 21],
    ['Georgy', 3.00, 20]
] )

7.7.2.3. 3. การลบ

del a[1]
a.append( [1,2,3] )
a.remove( [1,2,3] )

students.remove( ['Georgy', 3.00, 20] )
print(students)

7.7.2.4. 4. การเรียงลำดับ sort()

การเรียงลำดับตามตำแหน่ง

print(a)
a.sort()
print(a)

print(students)
students.sort()
print(students)

การเรียงลำดับโดยระบุตำแหน่งที่ใช้เปรียบเทียบ

from operator import itemgetter
print(a)
a.sort(key = itemgetter(0))
print(a)

students.append( ['Zacky', 3.11, 19] )
print(students)
students.sort(key = itemgetter(0)) # sort by name
print(students)
students.sort(key = itemgetter(1)) # sort by gpa
print(students)
students.sort(key = itemgetter(2)) # sort by age
print(students)

7.7.2.5. EX0901

โจทย์

จงเขียนโปรแกรมเพื่อรับข้อมูลของนักศึกษาชั้นปีที่หนึ่งของหลักสูตรหนึ่งเพื่อเรียงลำดับตามเกรดเฉลี่ย

รูปแบบข้อมูลนำเข้า

  • บรรทัดแรกระบุจำนวนนักศึกษาในหลักสูตร n

  • n บรรทัดถัดไปจะเก็บข้อมูลนักศึกษา ประกอบไปด้วย ชื่อ-สกุล, เกรดเฉลี่ย, อายุ

ตัวอย่างข้อมูลนำเข้า

5
Andy, 3.34, 20
Cathy, 2.23, 19
Betty, 3.55, 21
Eddy, 3.90, 18
Dorothy, 3.10, 20

ตัวอย่างข้อมูลส่งออก

Dorothy, 3.10, 20
Cathy, 2.23, 19
Andy, 3.34, 20
Betty, 3.55, 21
Eddy, 3.90, 18

7.7.3. Non-sequence Collection

โครงสร้างข้อมูลที่ไม่มีลำดับ

Recap: โครงสร้างข้อมูลที่เป็นลำดับ (sequence) ได้แก่ tuple และ list

โครงสร้างข้อมูลที่ไม่เป็นลำดับได้แก่ set และ dict

7.7.4. Set - เซต

เป็นประเภทของข้อมูลที่ใช้เก็บข้อมูลประเภทเซต * สมาชิกไม่มีลำดับ * จำนวนสมาชิกไม่สามารถซ้ำกันไดั

7.7.4.1. 1. การสร้างเซต

s = set() # empty set
s = { 'Apple', 'Banana', 'Cranberry', 'Durian' }
a = { 1, 2, 3, 4 }
b = { 3, 4, 5, 6, 7, 8 }

7.7.4.2. 2. การเข้าถึงสมาชิกในเซต

เนื่องจากเซตไม่มีลำดับดังนั้นจึงไม่สามารถเข้าถึงด้วยตำแหน่งหรือ index ได้

for e in s:
    print( e )

print( len(s) )

7.7.4.3. 3. การเพิ่มสมาชิก

การเพิ่มสมาชิก

print(s)
s.add('Connery')
print(s)

การเพิ่มสมาชิกจากเซตอื่น

d = { 'Mangosteen', 'Cherry', 'Gooseberry' }
u = s.union(d)
print(u)
print(s)

7.7.4.4. 4. การลบสมาชิก

การลบสมาชิก

print(u)
u.remove('Cherry') # KeyError
u.discard('Cherry')
print(u)

การลบหลายสมาชิก

print(u)
u.difference(d)
print(u)

7.7.4.5. สรุปฟังก์ชันของเซต

ฟังก์ชัน

ความหมาย

a.add(m)

เพิ่มสมาชิก |

a.clear()

ลบทุกสมาชิก |

a.copy()

สร้าง copy ของเซต s |

a.difference(b)

สร้างเซตใหม่ที่มีทุกสมาชิกของ a ที่ไม่ใช่สมาชิกของ b |

a.isdisjoint(b)

จริง ถ้า a กับ b ไม่มีสมาชิกร่วม |

a.issubset(b)

จริง ถ้า a เป็นซับเซตของ b |

a.issuperset(b)

จริง ถ้า a เป็น superset ของ b |

a.pop()

สุ่มเลือกสมาชิกและลบจากเซต |

a.remove(m)

ลบสมาชิก m จากเซต a

a.union(b)

union

a.update(b)

union และ update

7.7.5. EX0902

โจทย์

โปรแกรมเมอร์คนหนึ่งต้องการเขียนโปรแกรมเพื่อนับคำในเอกสารภาษาอังกฤษแผ่นหนึ่งซึ่งประกอบไปด้วย หลายประโยค แต่ละประโยคมีหลายคำ

เงื่อนไขการนำคำให้ถือว่าตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กเป็นคำเดียวกัน เช่น Once และ once ถือเป็นคำเดียว

Hint: 'Once'.lower() == 'once'

ตัวอย่างข้อมูลนำเข้า

Once upon a time there lived a widow woman and her son Jack on their small farm in the country Every day Jack would help his mother with the chores chopping the wood weeding the garden and milking the cow But despite all their hard work Jack and his mother were very poor with barely enough money to keep themselves fed

ตัวอย่างข้อมูลส่งออก

48

7.7.6. Dictionary - dict

dict เป็นชุดข้อมูลที่เก็บข้อมูลโดยการจับคู่ค่าสองค่าเรียกว่า key กับ value หลายๆ คู่

7.7.6.1. 1. การสร้าง

d = {}
ages = {
    'Paul': 25,
    'Born': 20,
    'ติ๊ก': 21,
    'Great': 21,
    'Benz': 22
}

print(len(d))
print(len(ages))

7.7.6.2. 2. การเข้าถึง

การดูรายการ key ทั้งหมด

print( d.keys() )
print( ages.keys() )

การดูรายการจาก key ทั้งหมด

for k in d:
    print(k)

for k in d.keys():
    print(k)

การดูรายการ value ทั้งหมด

print( d.values() )

การเข้าถึงโดยใช้ key

print( ages['Paul'] )
print( 2018 - ages['Benz'] )

for k in ages:
    print(k, ages[k])

การดูรายการเป็นคู่

for k,v in ages.items():
    print(k, v)

7.7.6.3. 3. การกำหนดค่า

การกำหนดค่า

ages['Paul'] = 22

การเพิ่มค่า

ages['Jack'] = 25
print( ages )

7.7.6.4. 4. การตรวจสอบ

การตรวจสอบว่ามี key ``k`` ใน dict ``d`` หรือไม่

b = key in d
print(b)
print( k in d )

การตรวจสอบว่ามี value ``v`` ใน dict ``d`` หรือไม่

b = v in d.values()
print(b)
print( v in d.values() )

7.7.6.5. 5. สรุปฟังก์ชัน dict

ฟังก์ ชัน

การทำ งาน

k in d

จริง ถ้า d | มี | key | k |

d.key s()

ลำดับ ของ keys

d.val ues()

ลำดับ ของ value s

d.ite ms()

ลำดับ ของ (key, value )

del d[k]

ลบ คู่ที | ่มี | key | เป็น | k |

d.cle ar()

ลบข้อ | มูลทั | ้งหมด | ออก |

d.get (k, defau lt_v alue)

ดูค่า | value | ของ k | โดย | ถ้าหา | ไม่เจ | อให้ใ | ช้ | defau | lt_v | alue | แทน |

7.7.7. EX0903

โจทย์

โปรแกรมเมอร์คนหนึ่งต้องการเขียนโปรแกรมเพื่อนับความถี่ของคำในเอกสารภาษาอังกฤษแผ่นหนึ่งซึ่งประกอบไปด้วย หลายประโยค แต่ละประโยคมีหลายคำ

เงื่อนไขการนำคำให้ถือว่าตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กเป็นคำเดียวกัน เช่น Once และ once ถือเป็นคำเดียว

Hint: 'Once'.lower() == 'once'

ตัวอย่างข้อมูลนำเข้า

A widow woman and her son Jack in a farm
Jack live with his mother

ตัวอย่างข้อมูลส่งออก

'woman': 1
'son': 1
'and': 1
'mother': 1
'in': 1
'her': 1
'farm': 1
'widow': 1
'a': 2
'with': 1
'his': 1
'live': 1
'jack': 2