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
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
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"] # rimuoveLặp lại một lệnh
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?
"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".
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ó
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`.
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
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`.
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
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.
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ử