Dễ dàng trích xuất giá trị nếu chúng ta có chìa khóa, giống như mở ổ khóa bằng chìa khóa. Tuy nhiên, điều ngược lại không hề đơn giản, kiểu như “bẻ chìa có ổ”, có thể
Đôi khi, việc trích xuất khóa trở nên quan trọng, đặc biệt khi khóa và giá trị có mối quan hệ một đối một. Đó là, khi một trong số chúng là duy nhất và do đó có thể đóng vai trò là khóa
Hầu hết mọi loại giá trị đều có thể được sử dụng làm khóa từ điển trong Python. Bạn thậm chí có thể sử dụng các đối tượng tích hợp sẵn như kiểu và hàm. Tuy nhiên, có một số hạn chế mà các khóa từ điển phải tuân theo
Đầu tiên, một khóa nhất định chỉ có thể xuất hiện trong từ điển một lần. Khóa trùng lặp không được phép. Từ điển ánh xạ mỗi khóa thành một giá trị tương ứng, vì vậy sẽ không hợp lý khi ánh xạ một khóa cụ thể nhiều lần. Nếu bạn chỉ định một khóa lần thứ hai trong quá trình tạo từ điển lần đầu, thì lần xuất hiện thứ hai sẽ ghi đè lần đầu tiên
Thứ hai, khóa từ điển phải thuộc loại không thay đổi. Ví dụ: bạn có thể sử dụng số nguyên, số float, chuỗi hoặc Boolean làm khóa từ điển. Tuy nhiên, cả danh sách và từ điển khác đều không thể đóng vai trò là khóa từ điển vì danh sách và từ điển có thể thay đổi. Mặt khác, các giá trị có thể là bất kỳ loại nào và có thể được sử dụng nhiều lần
Joshua Dougas trên
Tôi đã rất ngạc nhiên khi thông báo lỗi cho các khóa danh sách hoàn toàn không đề cập đến khả năng thay đổi
Tôi đã chơi xung quanh và thấy rằng các đối tượng có thể thay đổi thực sự hoạt động như các khóa, miễn là đối tượng có thể băm được. Chúng ta có thể tạo một danh sách hậu duệ có thể băm được bằng cách triển khai phương thức hash[] bằng cách sử dụng một số sơ đồ tùy ý
Tôi đã làm điều này bên dưới và thấy rằng các đối tượng có thể thay đổi trên thực tế hoạt động như các khóa từ điển, chỉ là việc sử dụng các khóa có thể thay đổi có thể dẫn đến kết quả không mong muốn
Ví dụ: nếu bạn thêm một mục bằng khóa có thể thay đổi và sau đó thay đổi khóa không thể đảo ngược, thì bạn có nguy cơ 'mất' giá trị được liên kết. Tôi chắc chắn rằng có một loạt các cảnh báo khác, chẳng hạn như va chạm, cũng như
Mỗi khóa được phân tách khỏi giá trị của nó bằng dấu hai chấm [. ], các mục được phân tách bằng dấu phẩy và toàn bộ nội dung được đặt trong dấu ngoặc nhọn. Một từ điển trống không có bất kỳ mục nào được viết chỉ bằng hai dấu ngoặc nhọn, như thế này. {}
Các khóa là duy nhất trong một từ điển trong khi các giá trị có thể không. Các giá trị của từ điển có thể thuộc bất kỳ loại nào, nhưng các khóa phải thuộc loại dữ liệu bất biến, chẳng hạn như chuỗi, số hoặc bộ dữ liệu
Truy cập các giá trị trong từ điển
Để truy cập các phần tử từ điển, bạn có thể sử dụng dấu ngoặc vuông quen thuộc cùng với khóa để lấy giá trị của nó. Sau đây là một ví dụ đơn giản -
#!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} print "dict['Name']: ", dict['Name'] print "dict['Age']: ", dict['Age']
Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -
dict['Name']: Zara dict['Age']: 7
Nếu chúng tôi cố gắng truy cập một mục dữ liệu bằng một khóa không phải là một phần của từ điển, chúng tôi sẽ gặp lỗi như sau -
#!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} print "dict['Alice']: ", dict['Alice']
Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -
dict['Alice']: Traceback [most recent call last]: File "test.py", line 4, in print "dict['Alice']: ", dict['Alice']; KeyError: 'Alice'
cập nhật từ điển
Bạn có thể cập nhật từ điển bằng cách thêm mục nhập mới hoặc cặp khóa-giá trị, sửa đổi mục nhập hiện có hoặc xóa mục nhập hiện có như minh họa bên dưới trong ví dụ đơn giản –
#!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} dict['Age'] = 8; # update existing entry dict['School'] = "DPS School"; # Add new entry print "dict['Age']: ", dict['Age'] print "dict['School']: ", dict['School']
Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -
dict['Age']: 8 dict['School']: DPS School
Xóa các thành phần từ điển
Bạn có thể xóa các thành phần từ điển riêng lẻ hoặc xóa toàn bộ nội dung của từ điển. Bạn cũng có thể xóa toàn bộ từ điển trong một thao tác
Để xóa toàn bộ từ điển một cách rõ ràng, chỉ cần sử dụng câu lệnh del. Sau đây là một ví dụ đơn giản -
#!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} del dict['Name']; # remove entry with key 'Name' dict.clear[]; # remove all entries in dict del dict ; # delete entire dictionary print "dict['Age']: ", dict['Age'] print "dict['School']: ", dict['School']
Điều này tạo ra kết quả sau. Lưu ý rằng một ngoại lệ được đưa ra bởi vì sau khi từ điển del dict không còn tồn tại nữa -
dict['Age']: Traceback [most recent call last]: File "test.py", line 8, in print "dict['Age']: ", dict['Age']; TypeError: 'type' object is unsubscriptable
Lưu ý - phương thức del[] được thảo luận trong phần tiếp theo
Thuộc tính của khóa từ điển
Giá trị từ điển không có hạn chế. Chúng có thể là bất kỳ đối tượng Python tùy ý nào, đối tượng tiêu chuẩn hoặc đối tượng do người dùng định nghĩa. Tuy nhiên, điều tương tự cũng không đúng với các phím
Có hai điểm quan trọng cần nhớ về khóa từ điển -
[a] Không được phép nhập nhiều hơn một mục trên mỗi khóa. Điều đó có nghĩa là không cho phép khóa trùng lặp. Khi gặp phải các khóa trùng lặp trong quá trình gán, nhiệm vụ cuối cùng sẽ thắng. Ví dụ -
________số 8_______Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -
dict['Name']: Manni
[b] Khóa phải là bất biến. Điều đó có nghĩa là bạn có thể sử dụng chuỗi, số hoặc bộ dữ liệu làm khóa từ điển nhưng không được phép sử dụng những thứ như ['key']. Sau đây là một ví dụ đơn giản -
dict['Name']: Zara dict['Age']: 70
Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -
dict['Name']: Zara dict['Age']: 71
Các chức năng & phương pháp từ điển tích hợp
Python bao gồm các chức năng từ điển sau -
Sr. Không. Chức năng với Description1cmp[dict1, dict2]So sánh các yếu tố của cả dict
2len[chính tả]Cung cấp tổng chiều dài của từ điển. Điều này sẽ bằng với số lượng mục trong từ điển
3str[chính tả]Tạo một biểu diễn chuỗi có thể in được của một từ điển
4 loại [biến]Trả về kiểu của biến đã truyền. Nếu biến được truyền là từ điển thì nó sẽ trả về kiểu từ điển