Thứ ba, 21/11/2017 | 00:00 GMT+7

Hiểu từ điển bằng Python 3

Từ điển là kiểu ánh xạ tích hợp của Python. Từ điển ánh xạ các khóa với các giá trị và các cặp key-value này cung cấp một cách hữu ích để lưu trữ dữ liệu bằng Python.

Thường được sử dụng để giữ dữ liệu có liên quan, chẳng hạn như thông tin có trong ID hoặc profile user , từ điển được tạo bằng dấu ngoặc nhọn ở hai bên { } .

Một từ điển trông như thế này:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987} 

Ngoài các dấu ngoặc nhọn, cũng có dấu hai chấm ( : ) suốt từ điển.

Các từ bên trái dấu hai chấm là các phím. Các khóa có thể được tạo thành từ bất kỳ kiểu dữ liệu bất biến nào. Các khóa trong từ điển trên là:

  • 'username'
  • 'online'
  • 'followers'

Mỗi khóa trong ví dụ trên là các giá trị chuỗi .

Các từ ở bên phải dấu hai chấm là giá trị. Các giá trị có thể bao gồm bất kỳ kiểu dữ liệu nào. Các giá trị trong từ điển trên là:

  • 'sammy-shark'
  • True
  • 987

Mỗi giá trị này là một chuỗi, Boolean hoặc số nguyên .

Hãy in từ điển sammy :

print(sammy) 
Output
{'username': 'sammy-shark', 'followers': 987, 'online': True}

Nhìn vào kết quả , thứ tự của các cặp key-value có thể đã thay đổi. Trong version Python 3.5 trở về trước, kiểu dữ liệu từ điển không có thứ tự. Tuy nhiên, trong version Python 3.6 trở lên, kiểu dữ liệu từ điển vẫn có thứ tự. Dù từ điển có được sắp xếp thứ tự hay không, các cặp key-value sẽ vẫn nguyên vẹn, cho phép ta truy cập dữ liệu dựa trên ý nghĩa quan hệ của chúng.

Truy cập các phần tử từ điển

Ta có thể gọi các giá trị của từ điển bằng cách tham chiếu đến các khóa liên quan.

Truy cập các mục dữ liệu bằng các phím

Vì từ điển cung cấp các cặp key-value để lưu trữ dữ liệu, chúng có thể là các yếu tố quan trọng trong chương trình Python của bạn.

Nếu ta muốn tách tên user của Sammy, ta có thể thực hiện bằng cách gọi sammy['username'] . Hãy in nó ra:

print(sammy['username']) 
Output
sammy-shark

Từ điển hoạt động giống như một database trong đó thay vì gọi một số nguyên để nhận một giá trị index cụ thể như bạn làm với một danh sách, bạn gán một giá trị cho một khóa và có thể gọi khóa đó để nhận giá trị liên quan của nó.

Bằng cách gọi khóa 'username' ta nhận được giá trị của khóa đó, đó là 'sammy-shark' .

Các giá trị còn lại trong từ điển sammy có thể được gọi tương tự bằng cách sử dụng cùng một định dạng:

sammy['followers'] # Returns 987  sammy['online'] # Returns True 

Bằng cách sử dụng các cặp key-value của từ điển, ta có thể tham chiếu các khóa để truy xuất giá trị.

Sử dụng các phương pháp để truy cập các phần tử

Ngoài việc sử dụng các khóa để truy cập các giá trị, ta cũng có thể làm việc với một số phương pháp được tích hợp sẵn:

  • dict.keys() cô lập các khóa
  • dict.values() cô lập các giá trị
  • dict.items() trả về các mục ở định dạng danh sách gồm các cặp tuple (key, value)

Để trả lại các khóa, ta sẽ sử dụng phương thức dict.keys() . Trong ví dụ của ta , điều đó sẽ sử dụng tên biến và là sammy.keys() . Hãy chuyển nó vào một phương thức print() và xem kết quả kết quả :

print(sammy.keys()) 
Output
dict_keys(['followers', 'username', 'online'])

Ta nhận kết quả đặt các khóa trong một đối tượng xem có thể lặp lại của lớp dict_keys . Các phím sau đó được in dưới dạng danh sách.

Phương pháp này được dùng để truy vấn trên các từ điển. Ví dụ: ta có thể xem các khóa chung được chia sẻ giữa hai cấu trúc dữ liệu từ điển:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987} jesse = {'username': 'JOctopus', 'online': False, 'points': 723}  for common_key in sammy.keys() & jesse.keys():     print(sammy[common_key], jesse[common_key]) 

Từ điển sammy và từ điển jesse là một từ điển profile user .

Tuy nhiên, profile của họ có các khóa khác nhau, vì Sammy có profile xã hội với những người theo dõi liên quan và Jesse có profile chơi game với các điểm liên quan. Hai key chung của chúng là username và trạng thái online , ta có thể tìm thấy chúng khi chạy chương trình nhỏ này:

Output
sammy-shark JOctopus True False

Ta chắc chắn có thể cải thiện chương trình để làm cho kết quả dễ đọc hơn, nhưng điều này minh họa rằng dict.keys() được dùng để kiểm tra trên các từ điển khác nhau để xem chúng có điểm chung hay không. Điều này đặc biệt hữu ích cho các từ điển lớn.

Tương tự, ta có thể sử dụng phương thức dict.values() để truy vấn các giá trị trong từ điển sammy , sẽ được xây dựng dưới dạng sammy.values() . Hãy in chúng ra:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}  print(sammy.values()) 
Output
dict_values([True, 'sammy-shark', 987])

Cả hai phương thức keys()values() trả về danh sách chưa được sắp xếp của các khóa và giá trị có trong từ điển sammy với các đối tượng xem là dict_keysdict_values tương ứng.

Nếu quan tâm đến tất cả các mục trong từ điển, ta có thể truy cập chúng bằng phương thức items() :

print(sammy.items()) 
Output
dict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])

Định dạng trả về của cái này là một danh sách được tạo thành từ các cặp tuple (key, value) với đối tượng xem dict_items .

Ta có thể lặp lại định dạng danh sách trả về bằng vòng lặp for . Ví dụ: ta có thể in ra từng khóa và giá trị của một từ điển nhất định, sau đó làm cho nó dễ đọc hơn bằng cách thêm một chuỗi:

for key, value in sammy.items():     print(key, 'is the key for the value', value) 
Output
online is the key for the value True followers is the key for the value 987 username is the key for the value sammy-shark

Vòng lặp for ở trên đã lặp lại các mục trong từ điển sammy và in ra các khóa và giá trị từng dòng một, kèm theo thông tin để con người dễ hiểu hơn.

Ta có thể sử dụng các phương thức có sẵn để truy cập các mục, giá trị và khóa từ cấu trúc dữ liệu từ điển.

Sửa đổi từ điển

Từ điển là một cấu trúc dữ liệu có thể thay đổi, vì vậy bạn có thể sửa đổi chúng. Trong phần này, ta sẽ xem xét thêm và xóa các phần tử từ điển.

Thêm và thay đổi các thành phần từ điển

Nếu không sử dụng phương thức hoặc hàm, bạn có thể thêm các cặp key-value vào từ điển bằng cách sử dụng cú pháp sau:

dict[key] = value 

Ta sẽ xem xét cách thức hoạt động của điều này trong thực tế bằng cách thêm cặp key-value vào từ điển có tên là usernames :

usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}  usernames['Drew'] = 'squidly'  print(usernames) 
Output
{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

Bây giờ ta thấy rằng từ điển đã được cập nhật với cặp key-value 'Drew': 'squidly' . Bởi vì các từ điển có thể không có thứ tự, cặp này có thể xảy ra ở bất kỳ đâu trong kết quả của từ điển. Nếu sau này ta sử dụng từ điển usernames trong file chương trình của bạn , nó sẽ bao gồm cặp key-value bổ sung.

Ngoài ra, cú pháp này được dùng để sửa đổi giá trị được gán cho một khóa. Trong trường hợp này, ta sẽ tham chiếu đến một khóa hiện có và chuyển một giá trị khác cho nó.

Hãy xem xét một từ điển được drew là một trong những user trên một mạng nhất định. Ta sẽ nói rằng user này đã tăng lượng người theo dõi ngày hôm nay, vì vậy ta cần cập nhật giá trị số nguyên được chuyển cho khóa 'followers' . Ta sẽ sử dụng hàm print() để kiểm tra xem từ điển đã được sửa đổi hay chưa.

drew = {'username': 'squidly', 'online': True, 'followers': 305}  drew['followers'] = 342  print(drew) 
Output
{'username': 'squidly', 'followers': 342, 'online': True}

Trong kết quả kết quả , ta thấy rằng số lượng người theo dõi đã tăng từ giá trị số nguyên của 305 lên 342 .

Ta có thể sử dụng phương pháp này để thêm các cặp key-value vào từ điển với user nhập. Hãy viết một chương trình nhanh, usernames.py chạy trên dòng lệnh và cho phép đầu vào từ user để thêm nhiều tên và tên user được liên kết:

usernames.py
# Define original dictionary usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}  # Set up while loop to iterate while True:      # Request user to enter a name     print('Enter a name:')      # Assign to name variable     name = input()      # Check whether name is in the dictionary and print feedback     if name in usernames:         print(usernames[name] + ' is the username of ' + name)      # If the name is not in the dictionary...     else:          # Provide feedback                 print('I don\'t have ' + name + '\'s username, what is it?')          # Take in a new username for the associated name         username = input()          # Assign username value to name key         usernames[name] = username          # Print feedback that the data was updated         print('Data updated.') 

Hãy chạy chương trình trên dòng lệnh:

  • python usernames.py

Khi ta chạy chương trình, ta sẽ nhận được kết quả như sau:

Output
Enter a name: Sammy sammy-shark is the username of Sammy Enter a name: Jesse I don't have Jesse's username, what is it? JOctopus Data updated. Enter a name:

Khi kiểm tra xong chương trình, ta có thể nhấn CTRL + C để thoát khỏi chương trình. Bạn có thể cài đặt trình kích hoạt để thoát khỏi chương trình (chẳng hạn như gõ chữ q ) với câu lệnh có điều kiện để cải thiện mã.

Điều này cho thấy cách bạn có thể sửa đổi từ điển một cách tương tác. Với chương trình cụ thể này, ngay khi thoát khỏi chương trình bằng CTRL + C bạn sẽ mất tất cả dữ liệu trừ khi bạn triển khai cách xử lý việc đọc và ghi file .

Ta cũng có thể thêm và sửa đổi từ điển bằng cách sử dụng phương thức dict.update() . Điều này khác với phương thức append() có sẵn trong danh sách.

Trong từ điển jesse bên dưới, hãy thêm khóa 'followers' và đặt cho nó một giá trị số nguyên với jesse.update() . Sau đó, hãy print() từ điển cập nhật.

jesse = {'username': 'JOctopus', 'online': False, 'points': 723}  jesse.update({'followers': 481})  print(jesse) 
Output
{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}

Từ kết quả kết quả , ta có thể thấy rằng ta đã thêm thành công cặp key-value 'followers': 481 vào từ điển jesse .

Ta cũng có thể sử dụng phương thức dict.update() để sửa đổi cặp key-value hiện có bằng cách thay thế một giá trị nhất định cho một khóa cụ thể.

Hãy thay đổi trạng thái trực tuyến của Sammy từ True thành False trong từ điển sammy :

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}  sammy.update({'online': False})  print(sammy) 
Output
{'username': 'sammy-shark', 'followers': 987, 'online': False}

Dòng sammy.update({'online': False}) tham chiếu đến khóa hiện có 'online' và sửa đổi giá trị Boolean của nó từ True thành False . Khi ta gọi print() từ điển, ta thấy quá trình cập nhật diễn ra trong kết quả .

Để thêm các mục vào từ điển hoặc sửa đổi giá trị, ta có thể sử dụng cú pháp dict[key] = value hoặc phương thức dict.update() .

Xóa các thành phần từ điển

Cũng như bạn có thể thêm các cặp key-value và thay đổi giá trị trong kiểu dữ liệu từ điển, bạn cũng có thể xóa các mục trong từ điển.

Để xóa cặp key-value khỏi từ điển, ta sẽ sử dụng cú pháp sau:

del dict[key] 

Hãy lấy từ điển jesse đại diện cho một trong những user . Ta sẽ nói rằng Jesse không còn sử dụng nền tảng trực tuyến để chơi trò chơi nữa, vì vậy ta sẽ xóa mục được liên kết với khóa 'points' . Sau đó, ta sẽ in từ điển ra để xác nhận mục đã bị xóa:

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}  del jesse['points']  print(jesse) 
Output
{'online': False, 'username': 'JOctopus', 'followers': 481}

Dòng del jesse['points'] xóa cặp key-value 'points': 723 khỏi từ điển jesse .

Nếu ta muốn xóa tất cả các giá trị của nó trong một từ điển, ta có thể làm như vậy với phương thức dict.clear() . Điều này sẽ giữ một từ điển nhất định trong trường hợp ta cần sử dụng nó sau này trong chương trình, nhưng nó sẽ không còn chứa bất kỳ mục nào nữa.

Hãy xóa tất cả các mục trong từ điển jesse :

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}  jesse.clear()  print(jesse) 
Output
{}

Kết quả cho thấy bây giờ ta có một từ điển trống không có cặp key-value .

Nếu ta không cần một từ điển cụ thể nữa, ta có thể sử dụng del để loại bỏ nó hoàn toàn:

del jesse  print(jesse) 

Khi ta chạy lệnh gọi print() sau khi xóa từ điển jesse , ta sẽ nhận được lỗi sau:

Output
... NameError: name 'jesse' is not defined

Bởi vì từ điển là loại dữ liệu có thể thay đổi, chúng có thể được thêm vào, sửa đổi và xóa và xóa các mục.

Kết luận

Hướng dẫn này đã trình bày về cấu trúc dữ liệu từ điển trong Python. Từ điển được tạo thành từ các cặp key-value và cung cấp cách lưu trữ dữ liệu mà không cần dựa vào lập index . Điều này cho phép ta truy xuất các giá trị dựa trên ý nghĩa và mối quan hệ của chúng với các kiểu dữ liệu khác.

Từ đây, bạn có thể tìm hiểu thêm về các loại dữ liệu khác trong hướng dẫn " Hiểu về các loại dữ liệu " của ta .

Bạn có thể thấy kiểu dữ liệu từ điển được sử dụng trong các dự án lập trình chẳng hạn như duyệt web với Scrapy .


Tags:

Các tin liên quan

Cách sử dụng * args và ** kwargs trong Python 3
2017-11-20
Cách làm việc với control panel tương tác Python
2017-06-21
Cách viết câu lệnh có điều kiện trong Python 3
2017-06-16
Cách cài đặt pygame và tạo mẫu để phát triển trò chơi bằng Python 3
2017-06-15
Cách chuyển mã Python 2 sang Python 3
2017-05-17
Cách chuyển mã Python 2 sang Python 3
2017-05-17
Cách sử dụng tính năng ghi log trong Python 3
2017-05-02
Cách gỡ lỗi Python bằng control panel tương tác
2017-04-27
Cách sử dụng trình gỡ lỗi Python
2017-04-25
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên CentOS 7
2017-04-20