Một từ điển có thể chứa một từ điển khác, từ điển này có thể chứa chính các từ điển, v.v. với độ sâu tùy ý. Điều này được gọi là từ điển lồng nhau
Từ điển lồng nhau là một trong nhiều cách để biểu diễn thông tin có cấu trúc [tương tự như 'bản ghi' hoặc 'cấu trúc' trong các ngôn ngữ khác]
Tạo một từ điển lồng nhau
Từ điển lồng nhau được tạo giống như cách tạo từ điển thông thường. Sự khác biệt duy nhất là mỗi giá trị là một từ điển khác
Hãy xây dựng một từ điển lưu trữ hồ sơ nhân viên
D = {'emp1': {'name': 'Bob', 'job': 'Mgr'},
'emp2': {'name': 'Kim', 'job': 'Dev'},
'emp3': {'name': 'Sam', 'job': 'Dev'}}
Trình tạo dict[]
Có một số cách để tạo từ điển lồng nhau bằng cách sử dụng hàm tạo kiểu có tên dict[]
Để tạo một từ điển lồng nhau, chỉ cần chuyển khóa từ điển. cặp giá trị làm đối số từ khóa cho
D = dict[emp1 = {'name': 'Bob', 'job': 'Mgr'},
emp2 = {'name': 'Kim', 'job': 'Dev'},
emp3 = {'name': 'Sam', 'job': 'Dev'}]
print[D]
# Prints {'emp1': {'name': 'Bob', 'job': 'Mgr'},
# 'emp2': {'name': 'Kim', 'job': 'Dev'},
# 'emp3': {'name': 'Sam', 'job': 'Dev'}}
5 ConstructorD = dict[emp1 = {'name': 'Bob', 'job': 'Mgr'},
emp2 = {'name': 'Kim', 'job': 'Dev'},
emp3 = {'name': 'Sam', 'job': 'Dev'}]
print[D]
# Prints {'emp1': {'name': 'Bob', 'job': 'Mgr'},
# 'emp2': {'name': 'Kim', 'job': 'Dev'},
# 'emp3': {'name': 'Sam', 'job': 'Dev'}}
Bạn có thể sử dụng hàm dict[] cùng với hàm zip[] để kết hợp các danh sách khóa và giá trị riêng biệt thu được tự động trong thời gian chạy
IDs = ['emp1','emp2','emp3']
EmpInfo = [{'name': 'Bob', 'job': 'Mgr'},
{'name': 'Kim', 'job': 'Dev'},
{'name': 'Sam', 'job': 'Dev'}]
D = dict[zip[IDs, EmpInfo]]
print[D]
# Prints {'emp1': {'name': 'Bob', 'job': 'Mgr'},
# 'emp2': {'name': 'Kim', 'job': 'Dev'},
# 'emp3': {'name': 'Sam', 'job': 'Dev'}}
Bạn thường muốn tạo một từ điển với các giá trị mặc định cho mỗi khóa. Phương thức fromkeys[] cung cấp một cách để làm điều này
IDs = ['emp1','emp2','emp3']
Defaults = {'name': '', 'job': ''}
D = dict.fromkeys[IDs, Defaults]
print[D]
# Prints {'emp1': {'name': '', 'job': ''},
# 'emp2': {'name': '', 'job': ''},
# 'emp3': {'name': '', 'job': ''}}
Truy cập các mục từ điển lồng nhau
Bạn có thể truy cập các mục riêng lẻ trong từ điển lồng nhau bằng cách chỉ định khóa trong nhiều dấu ngoặc vuông
D = {'emp1': {'name': 'Bob', 'job': 'Mgr'},
'emp2': {'name': 'Kim', 'job': 'Dev'},
'emp3': {'name': 'Sam', 'job': 'Dev'}}
print[D['emp1']['name']]
# Prints Bob
print[D['emp2']['job']]
# Prints Dev
Nếu bạn tham chiếu đến một khóa không có trong từ điển lồng nhau, một ngoại lệ sẽ được đưa ra
print[D['emp1']['salary']]
# Triggers KeyError: 'salary'
Để tránh trường hợp ngoại lệ như vậy, bạn có thể sử dụng phương thức get[] từ điển đặc biệt. Phương thức này trả về giá trị cho khóa nếu khóa có trong từ điển, nếu không thì
D = dict[emp1 = {'name': 'Bob', 'job': 'Mgr'},
emp2 = {'name': 'Kim', 'job': 'Dev'},
emp3 = {'name': 'Sam', 'job': 'Dev'}]
print[D]
# Prints {'emp1': {'name': 'Bob', 'job': 'Mgr'},
# 'emp2': {'name': 'Kim', 'job': 'Dev'},
# 'emp3': {'name': 'Sam', 'job': 'Dev'}}
6, vì vậy phương thức này không bao giờ tăng D = dict[emp1 = {'name': 'Bob', 'job': 'Mgr'},
emp2 = {'name': 'Kim', 'job': 'Dev'},
emp3 = {'name': 'Sam', 'job': 'Dev'}]
print[D]
# Prints {'emp1': {'name': 'Bob', 'job': 'Mgr'},
# 'emp2': {'name': 'Kim', 'job': 'Dev'},
# 'emp3': {'name': 'Sam', 'job': 'Dev'}}
7# key present
print[D['emp1'].get['name']]
# Prints Bob
# key absent
print[D['emp1'].get['salary']]
# PrintsNone
Thay đổi các mục từ điển lồng nhau
Để thay đổi giá trị của một mục cụ thể trong từ điển lồng nhau, hãy tham khảo khóa của nó
D = dict[emp1 = {'name': 'Bob', 'job': 'Mgr'},
emp2 = {'name': 'Kim', 'job': 'Dev'},
emp3 = {'name': 'Sam', 'job': 'Dev'}]
print[D]
# Prints {'emp1': {'name': 'Bob', 'job': 'Mgr'},
# 'emp2': {'name': 'Kim', 'job': 'Dev'},
# 'emp3': {'name': 'Sam', 'job': 'Dev'}}
0Thêm hoặc cập nhật các mục từ điển lồng nhau
Dễ dàng thêm hoặc cập nhật các mục từ điển lồng nhau. Chỉ cần tham khảo mục theo khóa của nó và gán giá trị. Nếu khóa đã có trong từ điển, giá trị của nó sẽ được thay thế bằng khóa mới
D = dict[emp1 = {'name': 'Bob', 'job': 'Mgr'},
emp2 = {'name': 'Kim', 'job': 'Dev'},
emp3 = {'name': 'Sam', 'job': 'Dev'}]
print[D]
# Prints {'emp1': {'name': 'Bob', 'job': 'Mgr'},
# 'emp2': {'name': 'Kim', 'job': 'Dev'},
# 'emp3': {'name': 'Sam', 'job': 'Dev'}}
1Nếu khóa mới, nó sẽ được thêm vào từ điển với giá trị của nó
D = dict[emp1 = {'name': 'Bob', 'job': 'Mgr'},
emp2 = {'name': 'Kim', 'job': 'Dev'},
emp3 = {'name': 'Sam', 'job': 'Dev'}]
print[D]
# Prints {'emp1': {'name': 'Bob', 'job': 'Mgr'},
# 'emp2': {'name': 'Kim', 'job': 'Dev'},
# 'emp3': {'name': 'Sam', 'job': 'Dev'}}
2Hợp nhất hai từ điển lồng nhau
Sử dụng phương thức update[] tích hợp để hợp nhất các khóa và giá trị của một từ điển lồng vào một từ điển khác. Lưu ý rằng phương pháp này sẽ ghi đè mù quáng các giá trị của cùng một khóa nếu có xung đột
D = dict[emp1 = {'name': 'Bob', 'job': 'Mgr'},
emp2 = {'name': 'Kim', 'job': 'Dev'},
emp3 = {'name': 'Sam', 'job': 'Dev'}]
print[D]
# Prints {'emp1': {'name': 'Bob', 'job': 'Mgr'},
# 'emp2': {'name': 'Kim', 'job': 'Dev'},
# 'emp3': {'name': 'Sam', 'job': 'Dev'}}
0Tại đây, bản ghi 'emp2′ được cập nhật trong khi 'emp3′ được thêm vào từ điển
Xóa các mục từ điển lồng nhau
Có một số cách để xóa các mục khỏi từ điển lồng nhau
Xóa một mục bằng phím
Nếu bạn biết khóa của mục mình muốn, bạn có thể sử dụng phương thức pop[] . Nó xóa khóa và trả về giá trị của nó