Python - แผนที่
Python Maps เรียกอีกอย่างว่า ChainMap เป็นโครงสร้างข้อมูลประเภทหนึ่งเพื่อจัดการพจนานุกรมหลายเล่มรวมกันเป็นหน่วยเดียว พจนานุกรมแบบรวมประกอบด้วยคู่ของคีย์และค่าในลำดับเฉพาะซึ่งจะกำจัดคีย์ที่ซ้ำกันออกไป การใช้ ChainMap ที่ดีที่สุดคือการค้นหาในพจนานุกรมหลาย ๆ ครั้งและรับการจับคู่คีย์ - ค่าที่เหมาะสม นอกจากนี้เรายังเห็นว่า ChainMaps เหล่านี้ทำงานเป็นโครงสร้างข้อมูลแบบสแต็ก
การสร้าง ChainMap
เราสร้างพจนานุกรมสองพจนานุกรมและเชื่อมโยงกันโดยใช้วิธี ChainMap จากไลบรารีคอลเลกชัน จากนั้นเราจะพิมพ์คีย์และค่าของผลลัพธ์ของการรวมพจนานุกรม หากมีคีย์ที่ซ้ำกันระบบจะเก็บเฉพาะค่าจากคีย์แรกเท่านั้น
import collections
dict1 = {'day1': 'Mon', 'day2': 'Tue'}
dict2 = {'day3': 'Wed', 'day1': 'Thu'}
res = collections.ChainMap(dict1, dict2)
# Creating a single dictionary
print(res.maps,'\n')
print('Keys = {}'.format(list(res.keys())))
print('Values = {}'.format(list(res.values())))
print()
# Print all the elements from the result
print('elements:')
for key, val in res.items():
print('{} = {}'.format(key, val))
print()
# Find a specific value in the result
print('day3 in res: {}'.format(('day1' in res)))
print('day4 in res: {}'.format(('day4' in res)))
เมื่อดำเนินการโค้ดด้านบนจะให้ผลลัพธ์ดังต่อไปนี้
[{'day1': 'Mon', 'day2': 'Tue'}, {'day1': 'Thu', 'day3': 'Wed'}]
Keys = ['day1', 'day3', 'day2']
Values = ['Mon', 'Wed', 'Tue']
elements:
day1 = Mon
day3 = Wed
day2 = Tue
day3 in res: True
day4 in res: False
การจัดลำดับแผนที่ใหม่
หากเราเปลี่ยนลำดับของพจนานุกรมในขณะที่เชื่อมโยงกันในตัวอย่างข้างต้นเราจะเห็นว่าตำแหน่งขององค์ประกอบมีการแลกเปลี่ยนกันราวกับว่าอยู่ในห่วงโซ่ที่ต่อเนื่องกัน สิ่งนี้แสดงให้เห็นลักษณะการทำงานของ Maps อีกครั้งในรูปแบบสแต็ก
import collections
dict1 = {'day1': 'Mon', 'day2': 'Tue'}
dict2 = {'day3': 'Wed', 'day4': 'Thu'}
res1 = collections.ChainMap(dict1, dict2)
print(res1.maps,'\n')
res2 = collections.ChainMap(dict2, dict1)
print(res2.maps,'\n')
เมื่อดำเนินการโค้ดด้านบนจะให้ผลลัพธ์ดังต่อไปนี้
[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}]
[{'day3': 'Wed', 'day4': 'Thu'}, {'day1': 'Mon', 'day2': 'Tue'}]
กำลังอัปเดตแผนที่
เมื่อองค์ประกอบของพจนานุกรมได้รับการอัปเดตผลลัพธ์จะได้รับการอัปเดตทันทีในผลลัพธ์ของ ChainMap ในตัวอย่างด้านล่างเราจะเห็นว่าค่าที่อัปเดตใหม่สะท้อนในผลลัพธ์โดยไม่ต้องใช้วิธี ChainMap อย่างชัดเจนอีกครั้ง
import collections
dict1 = {'day1': 'Mon', 'day2': 'Tue'}
dict2 = {'day3': 'Wed', 'day4': 'Thu'}
res = collections.ChainMap(dict1, dict2)
print(res.maps,'\n')
dict2['day4'] = 'Fri'
print(res.maps,'\n')
เมื่อดำเนินการโค้ดด้านบนจะให้ผลลัพธ์ดังต่อไปนี้
[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}]
[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Fri'}]