Python Academy · บทเรียน

namedtuple และ OrderedDict

คอลเลกชันที่มีประโยชน์อื่น ๆ

บทเรียน 4 จาก 413 ขั้นตอน

namedtuple และ OrderedDict เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

โครงสร้างข้อมูลแบบคอลเลกชันที่มีประโยชน์อีกสองชนิด

มอดูล collections มี namedtuple สำหรับทูเพิลลักษณะระเบียนที่อ่านได้ง่าย และมี OrderedDict สำหรับพจนานุกรมที่มีเมธอดจัดลำดับเพิ่มเติม

นำเข้าทั้งสองชนิดด้วย from collections import namedtuple, OrderedDict

from collections import namedtuple, OrderedDict
print(namedtuple)
print(OrderedDict)

การกำหนดทูเพิลแบบมีชื่อ

namedtuple(name, fields) จะสร้างคลาสย่อยของทูเพิลขึ้นมาใหม่ โดยส่งชื่อชนิดข้อมูลและรายการชื่อฟิลด์เข้าไป ผลลัพธ์คือคลาสที่คุณสร้างอินสแตนซ์ได้

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p)

การเข้าถึงด้วยชื่อ

ข้อดีสำคัญคือ คุณอ่านค่าฟิลด์ด้วยชื่อแทนตัวเลขดัชนีที่เข้าใจได้ยาก ทำให้โค้ดอ่านง่ายขึ้นมาก

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x)
print(p.y)

ยังคงเป็นทูเพิล

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

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p[0])
x, y = p
print(x + y)

ไม่เปลี่ยนแปลงแต่แทนที่ได้

เช่นเดียวกับทูเพิลทั้งหมด ทูเพิลแบบมีชื่อไม่สามารถเปลี่ยนแปลงได้ หากต้องการสำเนาที่แก้ไขแล้ว ให้ใช้ ._replace() ซึ่งจะส่งคืนอินสแตนซ์ใหม่

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
q = p._replace(y=10)
print(p)
print(q)

การแปลงเป็นพจนานุกรม

._asdict() จะแปลงทูเพิลแบบมีชื่อเป็นพจนานุกรมทั่วไปที่จับคู่ชื่อฟิลด์กับค่า

from collections import namedtuple
Car = namedtuple('Car', ['make', 'year'])
c = Car('Toyota', 2026)
print(c._asdict())

ค่าเริ่มต้น

ระบุ defaults เมื่อตอนกำหนดทูเพิลแบบมีชื่อ ค่าเริ่มต้นจะใช้กับฟิลด์ทางขวาสุด ดังนั้นคุณจึงละเว้นฟิลด์เหล่านั้นได้เมื่อสร้างอินสแตนซ์

from collections import namedtuple
User = namedtuple('User', ['name', 'role'], defaults=['guest'])
print(User('Alice'))
print(User('Bob', 'admin'))

การตรวจสอบฟิลด์

แอตทริบิวต์ ._fields จะแสดงรายการชื่อฟิลด์ ซึ่งมีประโยชน์สำหรับการตรวจสอบโครงสร้างภายในหรือการสร้างโค้ดทั่วไป

from collections import namedtuple
Color = namedtuple('Color', ['r', 'g', 'b'])
print(Color._fields)

พื้นฐานของ OrderedDict

OrderedDict จดจำลำดับการแทรกข้อมูล ตั้งแต่ Python 3.7 เป็นต้นมา พจนานุกรมทั่วไปก็รักษาลำดับเช่นกัน แต่ OrderedDict มีเมธอดจัดลำดับเพิ่มเติมที่หาไม่ได้จากพจนานุกรมทั่วไป

from collections import OrderedDict
od = OrderedDict()
od['first'] = 1
od['second'] = 2
print(od)

move_to_end

.move_to_end(key) จะเลื่อนคีย์ไปไว้ท้ายสุด หรือไว้ที่จุดเริ่มต้นเมื่อใช้ last=False ความสามารถนี้มีเฉพาะใน OrderedDict และมีประโยชน์สำหรับตรรกะในรูปแบบ LRU

from collections import OrderedDict
od = OrderedDict(a=1, b=2, c=3)
od.move_to_end('a')
print(list(od.keys()))
od.move_to_end('c', last=False)
print(list(od.keys()))

ความเท่ากันที่ขึ้นกับลำดับ

ออบเจ็กต์ OrderedDict สองตัวจะเท่ากันก็ต่อเมื่อรายการของทั้งสองอยู่ในลำดับเดียวกัน พจนานุกรมทั่วไปจะไม่สนใจลำดับเมื่อเปรียบเทียบ

from collections import OrderedDict
a = OrderedDict([('x', 1), ('y', 2)])
b = OrderedDict([('y', 2), ('x', 1)])
print(a == b)
print(dict(a) == dict(b))

ตรวจสอบความเข้าใจ

คุณจะสร้างสำเนาที่แก้ไขแล้วของทูเพิลแบบมีชื่อได้อย่างไร ในเมื่อทูเพิลนั้นไม่สามารถเปลี่ยนแปลงได้

สรุป: ทูเพิลแบบมีชื่อและ OrderedDict

สรุป:

  • namedtuple(name, fields) สร้างระเบียนที่อ่านง่าย ไม่สามารถเปลี่ยนแปลงได้ และเข้าถึงฟิลด์ด้วยชื่อ
  • ใช้ ._replace() เพื่อสร้างสำเนาที่แก้ไขแล้ว และใช้ ._asdict() เพื่อแปลงเป็นพจนานุกรม
  • OrderedDict รักษาลำดับการแทรกข้อมูลและเพิ่ม .move_to_end()
  • การเปรียบเทียบความเท่ากันของ OrderedDict ขึ้นกับลำดับ ต่างจากพจนานุกรมทั่วไป
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())
เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
76
บทเรียน
320

คำถามที่พบบ่อย

บทเรียน “namedtuple และ OrderedDict” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “namedtuple และ OrderedDict” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “namedtuple และ OrderedDict”

คอลเลกชันที่มีประโยชน์อื่น ๆ คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “namedtuple และ OrderedDict” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple และ OrderedDict
← กลับไปที่ Python Academy