#python: Giải thích đơn giản về kiểu dữ liệu Dictionary trong Python

Hieu Nguyen
6 min readJan 6, 2020

--

Series tự học python

Bài viết này nằm trong series tự học Python ở mức cơ bản. Được ghi chép lại để tham khảo và lục lại khi cần.

Nội dung bài viết được việt hóa lại từ FreecodeCamp của tác giả @Estefania Cassingena Navone

Đặt vấn đề

Trước khi tìm hiểu về dictionary và tầm quan trọng của nó, chúng ta hãy cùng điểm qua một kiểu dữ liệu khác quen thuộc hơn: list (danh sách)

Khi anh em thao tác với kiểu dữ liệu danh sách trên python, anh em có thể truy cập vào từng phần tử bằng index — một con số miêu tả vị trí của phần tử trong danh sách. Bắt đầu từ 0 cho phần tử đầu tiên và tăng dần cho mỗi phần tử trong danh sách. Anh em có thể xem hình:

Nhưng sẽ ra sao nếu chúng ta cần lưu trữ hai giá trị có liên quan và “kết nối” với nhau?

Ví dụ: Anh em muốn lưu trữ tên học sinh với điểm của họ thì làm thế nào?

Nếu anh em sử dụng danh sách lồng nhau thì rất phức tạp và không hiệu quả vì khả năng mở rộng và quản lý kém. Và đây là lúc dictionary ra tay!

Dictionary trong Python

Một dictionary sẽ nhìn giống như hình dưới.

Với một dictionary, anh em có thể “kết nối” một giá trị này với một giá trị khác bằng một mối quan hệ giữa chúng trong code của anh em. Trong ví dụ này, “Gino” được “kết nối” với điểm của anh ta là 15, “Nora” được kết nối với số 30.

Cấu trúc của một dictionary

Một dictionary sẽ bao gồm:

  • Keys: Key là một giá trị được sử dụng để truy cập vào các giá trị khác. Keys này tương đương với “chỉ số” trong các kiểu strings, list, tuples. Trong dictionary, để truy cập vào các giá trị, chúng ta sử dụng khóa này.
  • Values: Là những giá trị mà anh em có thể truy xuất thông qua khóa.

Hai phần tử này được gọi là một cặp key-value

Cú pháp của dictionary

Dưới đây là một ví dụ về Dictionary trong Python thực hiện việc khớp chuỗi “Gino” với số 15 và “Nora” với số 30

{"Gino":15, "Nora": 30}
  • Để tạo một dictionary, chúng ta sử dụng cặp ngoặc nhọn { }
  • Anh em sử dụng dấu hai chấm để ngăn cách giữa cặp key-value
  • Với mỗi cặp key-value, chúng ta sử dụng dấu phẩy để phân chia.

Một vài lưu ý quan trọng đối với các Keys

  • Key phải là một giá trị duy nhất
  • Không giống như chuỗi được lập chỉ mục bởi các số, key có thể là chuỗi hoặc số…
  • Key không thể sử dụng một kiểu danh sách.

Thao tác với dictionary

Truy cập vào giá trị bằng cách sử dụng Keys

Nếu anh em cần truy cập vào một giá trị được liên kết với một key đặc biệt, anh em làm như sau:

<tên_biến>["tên_khóa"]

Ví dụ:

>>> ages = {"Gino":15, "Nora":30}
>>> ages["Gino"]
15

Nếu anh em sử dụng một key không có trong dictionary thì sẽ bị báo lỗi KeyError:

>>> ages = {"Gino": 15, "Nora": 30}
>>> ages["Talina"]
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
ages["Talina"]
KeyError: 'Talina'

Thêm cặp Key-value

Để thêm một giá trị mới, anh em đơn giản chỉ cần làm như sau:

>>> ages = {"Gino": 15, "Nora": 30}

# Add the key-value pair "Talina": 24
>>> ages["Talina"] = 24

# The dictionary now has this key-value pair
>>> ages
{'Gino': 15, 'Nora': 30, 'Talina': 24}

Sửa đổi cặp Key-value

Để sửa đổi một giá trị nào đó, chúng ta làm đơn giản như trường hợp bên trên:

>>> ages = {"Gino": 15, "Nora": 30}

# The key "Gino" already exists in the dictionary, so its associated value
# will be updated to 45.
>>> ages["Gino"] = 45

# The value was updated to 45.
>>> ages
{'Gino': 45, 'Nora': 30}

Xóa một cặp Key-value

Để xóa một cặp Key-value, anh em sử dụng lệnh del.

>>> ages = {"Gino": 15, "Nora": 30, "Talina": 45}

# Delete the key-value pair "Gino": 15.
>>> del ages["Gino"]

# The key-value pair was deleted.
>>> ages
{'Nora': 30, 'Talina': 45}

Kiểm tra Key trong dictionary

Đôi khi anh em cần kiểm tra xem trong dictionary của chúng ta có tồn tại khóa key hay không. Để làm điều này, anh em chỉ cần thực hiện đoạn lệnh sau:

"tên_khóa" in tên_biến

Ví dụ:

>>> ages = {"Gino": 15, "Nora": 30, "Talina": 45}
>>> "Talina" in ages
True
>>> "Gino" in ages
True
>>> "Lulu" in ages
False

Anh em cũng có thể sử dụng từ khóa in để kiểm tra các giá trị trong dictionary:

>>> ages = {"Gino": 15, "Nora": 30, "Talina": 45}
>>> 30 in ages.values()
True
>>> 10 in ages.values()
False

Duyệt Dictionary bằng vòng lặp

Lấy tên khóa key:

>>> ages = {"Gino": 15, "Nora": 30, "Talina": 45}
>>> for student in ages:
print(student)

Gino
Nora
Talina

Lấy cặp key-value trong một biến:

>>> ages = {"Gino": 15, "Nora": 30, "Talina": 45}

>>> for pair in ages.items():
print(pair)

('Gino', 15)
('Nora', 30)
('Talina', 45)

Lấy cặp key-value riêng:

>>> ages = {"Gino": 15, "Nora": 30, "Talina": 45}

# Tuple assignment to assign the key to the variable key
# and the value to the variable value.
>>> for key, value in ages.items():
print("Key:", key, "; Value:", value)


Key: Gino ; Value: 15
Key: Nora ; Value: 30
Key: Talina ; Value: 45

Lấy giá trị value:

>>> ages = {"Gino": 15, "Nora": 30, "Talina": 45}
>>> for age in ages.values():
print(age)

15
30
45

Một số phương thức phổ biến của Dictionary

.clear() — Xóa tất cả cặp key-value trong dictionary

.get(<key>,<default>) — trả về giá trị được liên kết với key. Giá trị default được cung cấp thêm nếu như trong dictionary không tồn tại <key>

.pop(<key>,<default>) — Xóa một cặp key-value ra khỏi dictionary

.update(<other>) — Cập nhật giá trị value nếu key đã tồn tại, nếu không thêm một cặp key-value mới.

>>> grades = {"Gino": 0, "Nora": 98, "Talina": 99}
>>> new_grades = {"Gino": 67}
>>> grades.update(new_grades)
>>> grades
{'Gino': 67, 'Nora': 98, 'Talina': 99}

Ví dụ ứng dụng — Frequencies Dictionary

Chúng ta sẽ thực hành lại bài học bằng cách sử dụng dictionary để tạo ra một hàm có chức năng đếm độ phổ biến của một chữ cái/ từ/ số trong một chuỗi/ danh sách cho trước.

Bài toán này có rất nhiều ứng dụng, đặc biệt là trong Machine learning.

def freq_dict(data):
freq = {}
for elem in data:
if elem in freq:
freq[elem] += 1
else:
freq[elem] = 1
return freq

Ứng dụng 1: Đếm độ phổ biến của từng chữ cái trong chuỗi

>>> def freq_dict(data):
freq = {}
for elem in data:
if elem in freq:
freq[elem] += 1
else:
freq[elem] = 1
return freq

>>> freq_dict("Hello, how are you?")
{'H': 1, 'e': 2, 'l': 2, 'o': 3, ',': 1, ' ': 3, 'h': 1, 'w': 1, 'a': 1, 'r': 1, 'y': 1, 'u': 1, '?': 1}

Ứng dụng 2: Đếm số lần xuất hiện của số trong một mảng

>>> def freq_dict(data):
freq = {}
for elem in data:
if elem in freq:
freq[elem] += 1
else:
freq[elem] = 1
return freq

>>> freq_dict([5, 2, 6, 2, 6, 5, 2, 2, 2])
{5: 2, 2: 5, 6: 2}

--

--

Hieu Nguyen
Hieu Nguyen

Written by Hieu Nguyen

Đang nghiên cứu về Python và Machine Learning. Rất mong được trao đổi thêm với các bạn cùng lĩnh vực

No responses yet