Python - Bản đồ

Python Maps còn được gọi là ChainMap là một kiểu cấu trúc dữ liệu để quản lý nhiều từ điển cùng nhau thành một đơn vị. Từ điển kết hợp chứa các cặp khóa và giá trị theo một trình tự cụ thể loại bỏ mọi khóa trùng lặp. Cách sử dụng tốt nhất của ChainMap là tìm kiếm qua nhiều từ điển cùng một lúc và nhận được ánh xạ cặp khóa-giá trị thích hợp. Chúng tôi cũng thấy rằng các Bản đồ chuỗi này hoạt động như cấu trúc dữ liệu ngăn xếp.

Tạo bản đồ chuỗi

Chúng tôi tạo hai từ điển và phân nhóm chúng bằng phương pháp ChainMap từ thư viện tuyển tập. Sau đó, chúng tôi in các khóa và giá trị của kết quả của sự kết hợp của các từ điển. Nếu có các khóa trùng lặp, thì chỉ giá trị từ khóa đầu tiên được giữ nguyên.

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)))

Khi đoạn mã trên được thực thi, nó tạo ra kết quả như sau.

[{'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

Sắp xếp lại bản đồ

Nếu chúng ta thay đổi thứ tự các từ điển trong khi ghép chúng lại trong ví dụ trên, chúng ta thấy rằng vị trí của các phần tử được hoán đổi cho nhau như thể chúng nằm trong một chuỗi liên tục. Điều này một lần nữa cho thấy hoạt động của Maps dưới dạng ngăn xếp.

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')

Khi đoạn mã trên được thực thi, nó tạo ra kết quả như sau.

[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}] 

[{'day3': 'Wed', 'day4': 'Thu'}, {'day1': 'Mon', 'day2': 'Tue'}]

Cập nhật bản đồ

Khi phần tử của từ điển được cập nhật, kết quả được cập nhật ngay lập tức trong kết quả của Bản đồ chuỗi. Trong ví dụ dưới đây, chúng ta thấy rằng giá trị cập nhật mới phản ánh trong kết quả mà không cần áp dụng lại phương pháp ChainMap một cách rõ ràng.

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')

Khi đoạn mã trên được thực thi, nó tạo ra kết quả như sau.

[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}] 

[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Fri'}]