Chuyển đến nội dung chính
Mô-đun 3 · Bài học 3 trong tổng số 411/36 trong khóa học~12 min
Bài học theo mô-đun (3/4)

Từ điển

từ điển (dict) là bản đồ khóa → giá trị: bạn liên kết một khóa (hầu như luôn luôn là một chuỗi) với bất kỳ giá trị nào. Đó là điều cơ bản cấu trúc dữ liệu để mô hình hóa các thực thể trong thế giới thực.

Tạo từ điển

Python
vuoto = {}
utente = {"nome": "Ada", "anni": 36, "attivo": True}
# costruttore alternativo
utente = dict(nome="Ada", anni=36, attivo=True)

Khóa phải có thể băm (không thể thay đổi): chuỗi, số, bộ dữ liệu có thể băm các phần tử. Mặt khác, các giá trị có thể là bất cứ thứ gì - ngay cả những mệnh lệnh khác.

Truy cập, sửa đổi, xóa

Python
utente["nome"]            # 'Ada'
utente["email"]           # KeyError!
utente.get("email")       # None       (default sicuro)
utente.get("email", "—")  # '—'        (default custom)
utente["citta"] = "Roma"  # aggiunge / aggiorna
del utente["attivo"]      # rimuove

Lặp lại một lệnh

Python
for chiave in utente:               # itera sulle CHIAVI (default)
    print(chiave, utente[chiave])

for chiave in utente.keys():        # esplicito
    ...

for valore in utente.values():
    print(valore)

for chiave, valore in utente.items():    # idiom più comune
    print(f"{chiave} = {valore}")

Thứ tự lặp lại là thứ tự chèn (được đảm bảo kể từ Python 3.7 trở đi).

Chìa khóa có tồn tại không?

Python
"nome" in utente     # True
"email" in utente    # False     (NON usa il valore, usa la chiave!)

setdefault: khởi tạo trong lần truy cập đầu tiên

Mẫu thường gặp: "nếu khóa không tồn tại, hãy đặt giá trị mặc định vào; trong bất kỳ trường hợp trả về giá trị hiện tại".

Python
gruppi = {}
for nome in ["Ada", "Linus", "Ada", "Grace", "Linus", "Ada"]:
    gruppi.setdefault(nome, []).append(1)
# {'Ada': [1, 1, 1], 'Linus': [1, 1], 'Grace': [1]}

Ngoài ra còn có collections.Counter cho trường hợp đếm cụ thể (chúng tôi sẽ thấy nó trong mô-đun stdlib).

Lặp lại từ điển

Bạn có thể lặp lại một từ điển theo nhiều cách:

  • for k in d: chỉ lặp lại các phím (hành vi mặc định).
  • for k, v in d.items(): lặp đồng thời các cặp khóa-giá trị (rất hữu ích).
  • for v in d.values(): chỉ lặp lại các giá trị.

Hãy thử nó

tập thể dục#python.m3.l3.e1
Nỗ lực: 0Đang tải…

Cho `user = {'nome': 'Ada', 'anni': 36}`, thêm khóa 'email' = 'ada@ex.com' rồi gán cho `email_or_default` giá trị của khóa 'telefono' bằng cách sử dụng .get với 'sconosciuto' mặc định. Đánh giá `email_or_default`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

.get('telefono', 'sconosciuto') không gây ra KeyError.

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#python.m3.l3.e2
Nỗ lực: 0Đang tải…

Cho `prices = {'mela': 1.2, 'pera': 1.5, 'kiwi': 2.0}`, tính tổng của tất cả các giá trị và gán nó cho `total`. Đánh giá `tổng`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

sum(prices.values()) cộng tất cả các giá trị.

Giải pháp khả dụng sau 3 lần thử

Thử thách bổ sung

tập thể dục#python.m3.l3.e3
Nỗ lực: 0Đang tải…

Given the dictionary `user = {'name': 'Alice'}`, use the `.get()` method to retrieve the value of the key `'role'`. If the key does not exist, make it return the default value `'guest'`. Store the result in `user_role` and evaluate it.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Phương thức get chấp nhận tham số thứ hai làm tham số dự phòng: user.get('role', 'guest').

Giải pháp khả dụng sau 3 lần thử