Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Collections:คำแนะนำทีละขั้นตอน

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 ฟรีวันนี้และพูดคุยกับหนึ่งในโค้ชอาชีพผู้เชี่ยวชาญของเรา!