Python มีประเภทการรวบรวมข้อมูลสี่ประเภท:รายการ สิ่งอันดับ ชุด และพจนานุกรม โมดูลคอลเลกชัน Python มีตัวเลือกเพิ่มเติมรวมถึง namedtuple
, Counter
, defaultdict
และ ChainMap
Python มีประเภทข้อมูลการรวบรวมสี่ประเภท:รายการ สิ่งอันดับ ชุด และพจนานุกรม ข้อมูลแต่ละประเภทเหล่านี้มีประโยชน์ในสถานการณ์เฉพาะ
ตัวอย่างเช่น เนื่องจากรายการสามารถแก้ไขได้ คุณอาจต้องการใช้รายการเพื่อจัดเก็บรายชื่อนักเรียนที่กำลังพัฒนา หรือสมมติว่าคุณต้องการเก็บรายการรสชาติไอศกรีมที่ไม่มีวันเปลี่ยนแปลง tuple ซึ่งเนื้อหาไม่สามารถแก้ไขได้ อาจเหมาะสมกว่า
บ่อยครั้งเมื่อคุณทำงานใน Python คุณอาจพบว่าชนิดข้อมูลเหล่านี้ไม่ได้มีคุณลักษณะทั้งหมดที่คุณต้องการ โชคดีที่มีโมดูล Python ที่คุณสามารถใช้เพื่อเข้าถึงคุณลักษณะขั้นสูงเพิ่มเติมที่เกี่ยวข้องกับการรวบรวมข้อมูล:โมดูลคอลเลกชัน Python
โมดูลคอลเลกชัน Python ถูกสร้างขึ้นเพื่อปรับปรุงการทำงานของตัวเลือกคอลเลกชันในตัวและเพื่อให้นักพัฒนามีความยืดหยุ่นมากขึ้นเมื่อทำงานกับโครงสร้างข้อมูล ในคู่มือนี้ เราจะอธิบายพื้นฐานของโมดูลการรวบรวม Python และสำรวจโครงสร้างข้อมูลที่ใช้บ่อยที่สุด 4 โครงสร้างจากโมดูล
ทบทวนคอลเลกชัน
คอลเล็กชันเป็นประเภทข้อมูลคอนเทนเนอร์ที่ใช้เก็บข้อมูลได้ ตามที่กล่าวไว้ก่อนหน้านี้ คอลเลกชั่นสามารถจัดเก็บรายการ ชุด ทูเพิล และพจนานุกรม ข้อมูลแต่ละประเภทมีลักษณะเฉพาะของตัวเอง
รายการ
รายการเป็นประเภทข้อมูลที่มีลำดับและเปลี่ยนแปลงได้ซึ่งสามารถใช้เพื่อจัดเก็บข้อมูลที่อาจเปลี่ยนแปลงได้ตลอดเวลา ตัวอย่างเช่น คุณสามารถเพิ่ม ลบ และอัปเดตรายการที่มีอยู่ได้ รายการสามารถมีค่าที่ซ้ำกัน คุณสามารถใช้หมายเลขดัชนีเพื่ออ้างอิงแต่ละรายการภายในรายการได้
ต่อไปนี้เป็นตัวอย่างการประกาศรายการใน Python:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
sandwiches = ["Cheese", "Ham", "Tuna", "Egg Mayo"]
ทูเพิลส์
Tuples ได้รับการสั่งซื้อและประเภทข้อมูลที่ไม่เปลี่ยนรูป แม้ว่าทูเพิลสามารถมีค่าที่ซ้ำกันได้ แต่ค่าของทูเพิลไม่สามารถเปลี่ยนแปลงได้ Tuples ล้อมรอบด้วยวงเล็บปีกกา
นี่คือตัวอย่าง Python tuple:
sandwiches = ("Cheese", "Ham", "Tuna", "Egg Mayo")
ชุด
ชุดเป็นรายการแบบไม่เรียงลำดับ ประกาศโดยใช้วงเล็บเหลี่ยม ชุดไม่มีค่าดัชนีและไม่สามารถรวมรายการที่ซ้ำกันต่างจากรายการ
นี่คือตัวอย่างชุด Python:
sandwiches = {"Cheese", "Ham", "Tuna", "Egg Mayo"}
พจนานุกรม
พจนานุกรมเป็นประเภทข้อมูลที่ไม่เรียงลำดับและเปลี่ยนแปลงได้ซึ่งสามารถจัดทำดัชนีได้ แต่ละรายการในพจนานุกรมมีคีย์และค่า
นี่คือตัวอย่างรายการพจนานุกรม Python:
sandwich = { "name": "Cheese", "price": 8.95 }
ข้อมูลสี่ประเภทนี้มีการใช้งานที่หลากหลายใน Python อย่างไรก็ตาม หากคุณต้องการดำเนินการขั้นสูงเพิ่มเติมกับประเภทข้อมูลคอนเทนเนอร์ Python โมดูลคอลเลกชัน Python ก็คุ้มค่าที่จะพิจารณา
โมดูลคอลเลกชั่น
โมดูลคอลเลกชัน Python มีโครงสร้างข้อมูลพิเศษจำนวนหนึ่งที่คุณสามารถใช้ได้นอกเหนือจากหรือเป็นทางเลือกแทนคอนเทนเนอร์ในตัวของ Python เพราะ collections
เป็นโมดูล เราต้องนำเข้าโปรแกรมของเรา อย่างไรก็ตาม มันถูกสร้างขึ้นใน Python ดังนั้นเราจึงไม่จำเป็นต้องนำเข้าไลบรารีสำรอง
ในบทความนี้ เราจะเน้นที่โครงสร้างข้อมูลสี่โครงสร้างที่ใช้บ่อยที่สุดจากโมดูลคอลเลกชัน ดังต่อไปนี้:
- เคาน์เตอร์
- ชื่อทูเพิล
- defaultdict
- ChainMap
เคาน์เตอร์
Counter()
เป็นคลาสย่อยของอ็อบเจ็กต์พจนานุกรมและสามารถใช้นับอ็อบเจ็กต์ที่แฮชได้ Counter()
ฟังก์ชันใช้ iterable เป็นอาร์กิวเมนต์และส่งกลับพจนานุกรม
สมมติว่าเรามีรายการคำสั่งซื้อแซนด์วิชสำหรับเดือนมกราคม และต้องการทราบว่าเราขายแซนด์วิช BLT ได้เท่าใดในเดือนนั้น เราสามารถใช้ Counter()
ทำหน้าที่นี้
นี่คือตัวอย่างโค้ดที่เราจะใช้:
from collections import Counter sandwich_sales = ["BLT", "Egg Mayo", "Ham", "Ham", "Ham", "Cheese", "BLT", "Cheese"] our_counter = Counter(sandwich_sales) print(our_counter["BLT"])
โปรแกรมของเราส่งคืน:2
.
มีหลายอย่างเกิดขึ้นในโค้ดของเรา เรามาทำลายมันกันเถอะ
ในบรรทัดแรก เรานำเข้า Counter
ฟังก์ชันจาก collections
. เราต้องทำแบบนี้เพราะ collections
เป็นโมดูล จากนั้น เราก็ประกาศ sandwich_sales
. ของเรา array ซึ่งเก็บแซนวิชที่เราขายได้ในเดือนมกราคม
ในบรรทัดถัดไป เราประกาศ our_counter
ตัวแปรและกำหนด Counter(sandwich_sales)
การทำงาน. ซึ่งช่วยให้เราเข้าถึงผลลัพธ์ของ Counter()
ฟังก์ชั่นเมื่อเราอ้างอิง our_counter
.
สุดท้าย เราใช้ print(our_counter[“BLT”])
เพื่อพิมพ์จำนวนแซนวิชในพจนานุกรมของเราเท่ากับ BLT
. ในกรณีนี้ คำตอบคือ 2
.
ชื่อทูเพิล
namedtuple()
วิธีการส่งกลับทูเปิลที่มีชื่อสำหรับแต่ละตำแหน่งในทูเปิล เมื่อคุณทำงานกับ tuple มาตรฐาน วิธีเดียวที่คุณสามารถเข้าถึงแต่ละค่าได้คือการอ้างอิงหมายเลขดัชนีของ tuple หากคุณกำลังทำงานกับ tuple ตัวใหญ่ อาจทำให้สับสนได้อย่างรวดเร็ว
นี่คือตัวอย่างการใช้ namedtuple()
วิธีเก็บชื่อและราคาแซนวิช:
from collections import namedtuple Sandwich = namedtuple("Sandwich", "name, price") first_sandwich = Sandwich("Chicken Teriyaki", "$3.00") print(first_sandwich.price)
โปรแกรมของเราส่งคืน:$3.00
.
มีหลายอย่างเกิดขึ้นในโค้ดของเรา เรามาทำลายมันกันเถอะ ในบรรทัดแรก เรานำเข้า namedtuple
จาก collections
เพื่อให้เราสามารถนำไปใช้ในโค้ดของเราได้
ในบรรทัดถัดไป เราสร้างแซนวิชทูเพิลที่มีชื่อ Sandwich
และกำหนดส่วนหัวสองรายการ:ชื่อและราคา ซึ่งช่วยให้เราใช้ส่วนหัวเหล่านี้เพื่ออ้างอิงค่าในทูเพิลของเราในภายหลังในโค้ดของเรา ต่อไป เราประกาศตัวแปรชื่อ first_sandwich
ซึ่งเรากำหนดให้รายการทูเพิล Chicken Teriyaki
.
สุดท้าย เราพิมพ์ราคาของ first_sandwich
. ของเรา ซึ่งในกรณีนี้คือ $3.00
คุณยังสามารถสร้าง namedtuple()
โดยใช้รายการ นี่คือตัวอย่าง:
second_sandwich = Sandwich._make(["Spicy Italian", "$3.75"]) print(second_sandwich.name)
โปรแกรมของเราส่งคืน:Spicy Italian
. ในตัวอย่างนี้ เราใช้ _make
นอกจาก Sandwich
. ของเราแล้ว รายการเพื่อแสดงว่าเราต้องการเปลี่ยนรายการของเราให้เป็น namedtuple()
.
ค่าเริ่มต้น
defaultdict()
สามารถใช้เมธอดเพื่อสร้างพจนานุกรม Python ที่ไม่ส่ง KeyError เมื่อคุณพยายามเข้าถึงวัตถุที่ไม่มีอยู่ แต่หากคุณอ้างอิงวัตถุที่ไม่มีอยู่ พจนานุกรมจะส่งคืนประเภทข้อมูลที่กำหนดไว้ล่วงหน้า
นี่คือตัวอย่างที่ใช้ defaultdict()
วิธีการประกาศพจนานุกรมที่จะส่งคืน str
ถ้าเราอ้างถึงวัตถุที่ไม่มีอยู่จริง:
from collections import defaultdict sandwiches = defaultdict(str) sandwiches[0] = "Ham and Cheese" sandwiches[1] = "BLT" print(sandwiches[1]) print(sandwiches[2])
โปรแกรมของเรากลับมา:
BLT // This is a blank line
ในตัวอย่างข้างต้น เราได้สร้างพจนานุกรมโดยมีค่าที่ตำแหน่งดัชนี และ
1
. เมื่อเราพิมพ์ sandwiches[1]
เราจะเห็นว่าพจนานุกรมของเราเก็บค่าของเราไว้ อย่างไรก็ตาม เมื่อเราพยายามพิมพ์รายการที่เกี่ยวข้องกับค่าดัชนี 2
โปรแกรมของเราส่งคืนบรรทัดว่างเนื่องจากไม่มีการกำหนดค่าให้กับดัชนีนั้น
ในพจนานุกรมมาตรฐาน โปรแกรมของเราจะคืนค่า KeyError อย่างไรก็ตาม เนื่องจากเราใช้ defaultdict
แต่โปรแกรมของเราจะคืนค่าประเภทข้อมูลที่เราระบุเมื่อเราสร้างพจนานุกรมแทน ในตัวอย่างข้างต้น เราระบุว่าคีย์ที่ไม่ถูกต้องควรส่งคืน str
แต่เราสามารถเข้ารหัสเพื่อส่งคืนจำนวนเต็มหรือประเภทข้อมูลที่ถูกต้องอื่นๆ ได้
ฟังก์ชันนี้จะมีประโยชน์เมื่อคุณกำลังทำงานกับพจนานุกรมเพื่อดำเนินการกับหลายรายการ แต่การดำเนินการนี้อาจใช้ไม่ได้กับแต่ละรายการ แทนที่จะทำให้โปรแกรมของคุณส่งคืนข้อผิดพลาด defaultdict()
จะคืนค่าเริ่มต้นและทำงานต่อไป
ChainMap
ChainMap()
วิธีใช้เพื่อรวมพจนานุกรมตั้งแต่สองพจนานุกรมขึ้นไป จะส่งคืนรายการพจนานุกรม ตัวอย่างเช่น สมมติว่าเรามีสองเมนู—เมนูมาตรฐานและเมนูลับ—ซึ่งเราต้องการรวมเป็นหนึ่งเมนูใหญ่ ในการดำเนินการนี้ เราสามารถใช้ ChainMap()
ฟังก์ชัน
นี่คือตัวอย่างการใช้ ChainMap()
เพื่อรวมเมนูมาตรฐานและเมนูลับของเรา:
from collections import ChainMap standard_menu = { "BLT": "$3.05", "Roast Beef": "$3.55", "Cheese": "$2.85", "Shrimp": "$3.55", "Ham": "$2.85" } secret_menu = { "Steak": "$3.60", "Tuna Special": "$3.20", "Turkey Club": "$3.20" } menu = ChainMap(standard_menu, secret_menu) print(menu)
รหัสของเราส่งคืนวัตถุ ChainMap ที่รวมสองเมนูของเราเข้าด้วยกันดังนี้:
ChainMap({'BLT': '$3.05', 'Roast Beef': '$3.55', 'Cheese': '$2.85', 'Shrimp': '$3.55', 'Ham': '$2.85'}, {'Steak': '$3.60', 'Tuna Special': '$3.20', 'Turkey Club': '$3.20'})
เราสามารถเข้าถึงแต่ละค่าใน ChainMap ของเราได้โดยอ้างอิงชื่อคีย์ ตัวอย่างเช่น นี่คือบรรทัดของรหัสที่ช่วยให้เราสามารถดึงราคาของแซนด์วิช BLT:
print(menu["BLT"])
โปรแกรมของเราส่งคืน:$3.05
นอกจากนี้ สิ่งสำคัญที่ควรทราบคือ ChainMap จะอัปเดตเมื่อมีการอัปเดตพจนานุกรมที่มีอยู่ ดังนั้น หากคุณเปลี่ยนค่าใน standard_menu
หรือ secret_menu
พจนานุกรม ออบเจ็กต์ ChainMap จะได้รับการอัปเดตด้วย นี่คือตัวอย่าง:
print(menu) standard_menu["BLT"] = "$3.10" print(menu)
รหัสของเราส่งคืน:
ChainMap({'BLT': '$3.10', 'Roast Beef': '$3.55', 'Cheese': '$2.85', 'Shrimp': '$3.55', 'Ham': '$2.85'}, {'Steak': '$3.60', 'Tuna Special': '$3.20', 'Turkey Club': '$3.20'})
อย่างที่คุณเห็น ราคาของ BLT ของเราเปลี่ยนจาก $3.05 เป็น $3.10 เนื่องจากเราเปลี่ยนราคาใน standard_menu
พจนานุกรม
ออบเจ็กต์ ChainMap ยังมีสองฟังก์ชันที่สามารถใช้เพื่อดึงคีย์หรือค่าจากอ็อบเจ็กต์ เราสามารถแสดงสิ่งนี้ได้โดยใช้ keys()
และ values()
วิธีการ วิธีการเหล่านี้จะคืนค่าคีย์ของข้อมูลของเรา (ซึ่งเราสามารถใช้เพื่ออ้างอิงค่าใดค่าหนึ่ง) และค่าที่ได้รับมอบหมาย:
print(list(menu.keys())) print(list(menu.values()))
รหัสของเราส่งคืนดังต่อไปนี้:
['Steak', 'Tuna Special', 'Turkey Club', 'BLT', 'Roast Beef', 'Cheese', 'Prawn', 'Ham'] ['$3.60', '$3.20', '$3.20', '$3.05', '$3.55', '$2.85', '$3.55', '$2.85']
รหัสของเราส่งคืนคีย์และค่าของแต่ละรายการในวัตถุ ChainMap ของเราเมื่อเราใช้ keys()
และ values()
วิธีการข้างต้น
นอกจากนี้ คุณสามารถเพิ่มพจนานุกรมใหม่ให้กับวัตถุ ChainMap โดยใช้ new_child()
กระบวนการ. สมมติว่าพ่อครัวแซนวิชของเราได้ลองแซนวิชใหม่ในเมนูทดสอบและต้องการเพิ่มแซนวิชสองรายการในเมนูใหม่ของเรา เราสามารถใช้รหัสต่อไปนี้เพื่อให้บรรลุเป้าหมายนี้:
test_menu = { "Veggie Deluxe": "$3.00", "House Club Special": "$3.65" } new_menu = menu.new_child(test_menu) print(new_menu)
รหัสของเราส่งคืน ChainMap ที่อัปเดตพร้อมแซนวิชใหม่ของเราที่จุดเริ่มต้นของพจนานุกรมดังนี้:
ChainMap({'Veggie Deluxe': '$3.00', 'House Club Special': '$3.65'}, {'BLT': '$3.05', 'Roast Beef': '$3.55', 'Cheese': '$2.85', 'Shrimp': '$3.55', 'Ham': '$2.85'}, {'Steak': '$3.60', 'Tuna Special': '$3.20', 'Turkey Club': '$3.20'})
บทสรุป
เราสามารถใช้โมดูลคอลเลกชัน Python เพื่อขยายคอลเล็กชันในตัวที่นำเสนอโดย Python และเพื่อเข้าถึงวิธีการโครงสร้างข้อมูลที่กำหนดเอง สิ่งนี้มีประโยชน์หากคุณต้องการทำงานกับประเภทข้อมูลคอลเลกชั่น เช่น รายการหรือทูเพิล แต่ต้องใช้งานฟังก์ชันบางอย่างที่ไม่มีในวานิลลา (หรือ plain
) หลาม
ในคู่มือนี้ โดยใช้ตัวอย่าง เราได้แจกแจงวิธีการใช้คอลเลกชันใน Python และอภิปรายถึงวิธีการหลักสี่วิธีที่นำเสนอโดยไลบรารี:Counter
, namedtuple
, defaultdict
และ ChainMap
.
ตอนนี้คุณมีความรู้ที่จำเป็นในการเริ่มทำงานกับโมดูลคอลเลกชัน Python อย่างผู้เชี่ยวชาญแล้ว!
คุณอยากรู้หรือไม่ว่าการเรียนรู้ Python สามารถช่วยให้คุณเข้าสู่สายอาชีพด้านเทคโนโลยีได้อย่างไร? ดาวน์โหลดแอป Career Karma ฟรีวันนี้และพูดคุยกับหนึ่งในโค้ชอาชีพผู้เชี่ยวชาญของเรา!