Python têntuple so với từ điển

Xác định một tên tuple hoặc loại khác để đại diện cho tệp Yaml có thể là một ý tưởng hay so với việc sử dụng một lệnh. Nhưng không phải vì bất biến

Python không thực sự hỗ trợ tính bất biến như C++ hay Haskell. Nó hỗ trợ ngăn chặn các sửa đổi tiếp theo đối với một đối tượng hiện có. e. g. các trường của bộ dữ liệu tích hợp không thể được chỉ định lại. Theo phần mở rộng, các loại tuple được đặt tên cũng vậy. Các lớp dữ liệu có thể được khai báo là

from collections import namedtuple
Configuration = namedtuple['Configuration', ['foo', 'bar']]
1. Nhưng tất cả điều này chủ yếu chỉ là kiểm tra thời gian chạy. Hãy xem xét việc ngăn chặn việc gán lại các trường nếu đó là mối quan tâm của bạn, nhưng đối với nhiều chương trình, điều đó không thực sự phù hợp

Lý do lớn hơn khiến bạn nên xem xét giới thiệu một loại dữ liệu cấu hình là nó làm cho các trường có sẵn trở nên rõ ràng. Với một dict, người dùng của dict này không biết nó phải có những mục nào hoặc những mục đó có loại gì. Với một lớp đại diện cho dữ liệu này, thông tin này có thể được làm rõ ràng. Và như một lợi ích bổ sung, bạn có thể kiểm tra loại, tự động hoàn thành và sẽ gặp lỗi khi bạn chỉnh sửa tệp cấu hình nhưng bạn vô tình nhập sai tên của một trường. Vì vậy, thay vì

config = parse_file[]
do_something[config['foo'], config['bar']]

nó sẽ là tốt đẹp để có

config = Configuration[**parse_file[]]
do_something[config.foo, config.bar]

Các cách khác nhau để khai báo các kiểu thuận tiện bao gồm hàm namedtuple[] cổ điển, ký hiệu lớp NamedTuple mới và các lớp dữ liệu

Với hàm namedtuple cổ điển, bạn chỉ cần liệt kê các trường

from collections import namedtuple
Configuration = namedtuple['Configuration', ['foo', 'bar']]

Hoặc tương đương với cú pháp gõ mới hơn

from typing import NamedTuple

class Configuration[NamedTuple]:
  foo: int
  bar: str

Hạn chế. bạn không thể xác thực trực tiếp rằng các trường cấu hình có chứa các giá trị thích hợp. Điều này có thể được giảm bớt bằng cách phân lớp bộ dữ liệu được đặt tên, ngoại trừ việc vì bộ dữ liệu là bất biến nên cấu trúc của chúng là đặc biệt. bạn sẽ phải triển khai

from collections import namedtuple
Configuration = namedtuple['Configuration', ['foo', 'bar']]
2 thay vì
from collections import namedtuple
Configuration = namedtuple['Configuration', ['foo', 'bar']]
3

Các lớp dữ liệu thường phù hợp hơn nếu bạn không thực sự cần cấu hình để hoạt động giống như một bộ dữ liệu [được sắp xếp], mặc dù bạn cũng có thể tùy ý yêu cầu Python triển khai các phương thức tương ứng. Tuy nhiên, ký hiệu dựa trên lớp mong muốn bạn cung cấp loại trường hoặc giá trị mặc định

Trong Python có tới 4 kiểu cấu trúc dữ liệu là , ,  và Dictionary. Trong các bài viết trước chúng ta đã từng làm quen với các kiểu dữ liệu này và còn lại Từ điển, một cấu trúc rất hay dùng trong Python, chúng ta sẽ làm quen với nó trong bài viết này

  10 sự thật thú vị về ngôn ngữ lập trình Python

  11 mẹo học Python dành cho “newbie”

1. Từ điển – Dictionary

Từ điển dữ liệu [Dictionary] còn được gọi là mảng liên kết [mảng liên kết] trong một số ngôn ngữ lập trình, là một dạng danh sách như bạn đã tìm hiểu. Có một điểm khác là các phần tử trong danh sách được truy xuất thông qua vị trí, phần tử trong từ điển được truy xuất thông qua khóa [key]. Bạn có thể định nghĩa từ khóa này, nó có thể là một chuỗi hoặc số nhưng nó phải là duy nhất trong từ điển

in sao vậy? . Hai người có cùng một số tài khoản, vậy biết chuyển khoản cho ai bây giờ?

Từ điển trong Python cũng có thể tưởng tượng giống như cuốn từ điển Anh – Việt không hạn. Bạn muốn tra từ “python” – tương ứng với từ khóa trong Từ điển, bạn sẽ có phần diễn giải chính là giá trị trong Từ điển. Do đó từ điển bao gồm rất nhiều phần tử mà mỗi phần tử đi theo cặp từ khóa – giá trị [key-value]

1. 1 Khai báo Từ điển

Từ điển trong Python được khai báo với cặp. Bên trong các phần tử theo cặp [khóa và giá trị] được phân tách bằng dấu phẩy, phân tách giữa khóa và giá trị của từng phần tử bằng dấu chấm. Cú pháp chung như sau

dictionary_name = {key_1: value_1, key_2: value_2, ..., key_n: value_n}

Ví dụ

friend_ages = {"Rolf": 24, "Adam": 30, "Anne": 27}
print[friend_ages["Adam"]] # Kết quả là 30

Chúng ta cũng có thể sử dụng hàm có sẵn dict[] để khai báo một từ điển

friend_ages = dict[{"Rolf": 24, "Adam": 30, "Anne": 27}]
# Hoặc
friend_ages = dict[[["Rolf", 24], ["Adam", 30], ["Anne", 27]]]

Chú thích

  • The key of Dictionary could be string or number, this key is duy nhất ở từng cấp
  • Giá trị của Từ điển có thể là Chuỗi, số hoặc cấu trúc Danh sách, Tuple, Bộ hoặc thậm chí là Từ điển

Một ví dụ khai báo Từ điển với giá trị phức tạp

friends = {
  "Rolf": {
    "phone": "09382993433",
    "address": "Boston, America",
    "age": 30
  },
  "Bob": {
    "phone": "03099483832",
    "address": "London, England",
    "age": 33
  },
  "Anne": {
    "phone": "00393982224",
    "address": "Texas, America",
    "age": 25
  }
}

1. 2 Truy xuất giá trị

Từ điển có thể truy xuất giá trị từng phần thông tin điện tử thông qua các từ khóa theo cú pháp

________số 8

Ví dụ, trong từ điển bạn bè ở trên, chúng ta có thể truy xuất thông tin [giá trị] của Bob [khóa] như sau

print[friends["Bob"]] # Kết quả là {'phone': '03099483832', 'address': 'London, England', 'age': 33}

Chú ý, mỗi phần tử trong Từ điển những người bạn này lại là một Từ điển nên chúng ta có thể truy xuất tiếp theo tuổi của Bob như sau

config = Configuration[**parse_file[]]
do_something[config.foo, config.bar]
0

Khi truy xuất đến các phần tử trong Dictionary, nếu từ khóa không tồn tại, chương trình sẽ báo lỗi KeyError

config = Configuration[**parse_file[]]
do_something[config.foo, config.bar]
1

Do vậy, trước khi truy xuất giá trị một phần tử trong từ điển, chúng ta cần kiểm tra xem từ khóa có tồn tại hay không với toán tử trong

config = Configuration[**parse_file[]]
do_something[config.foo, config.bar]
2

1. 3 Change value

Từ điển trong Python có thể thay đổi thêm bớt các phần tử, thay đổi giá trị của các phần tử hiện có

1. 3. 1 Thêm và cập nhật phần tử

Từ điển truy xuất thông qua khóa, làm như vậy khi gán giá trị cho một phần tử

  • Key tồn tại thì phần tử giá trị được cập nhật
  • The key does not being at, Dictionary được bổ sung một phần tử có khóa và giá trị trong câu lệnh
config = Configuration[**parse_file[]]
do_something[config.foo, config.bar]
3

Ngoài ra chúng ta có thể sử dụng phương thức. update[] để bổ sung hoặc chỉnh sửa giá trị nhiều phần tử trong từ điển. Trong ví dụ tiếp theo, chúng ta vừa thực hiện sửa đổi tuổi của Rolf thành 25 và thêm một phần tử mới vào từ điển

friend_ages = {"Rolf": 24, "Adam": 30, "Anne": 27}
print[friend_ages["Adam"]] # Kết quả là 30
0

1. 3. 2 Delete the dictionary section

Cũng giống như Danh sách, Từ điển có rất nhiều phương thức có sẵn để có thể xóa một phần tử khỏi từ điển như. xa lạ[],. nhạc pop[],. popitem[] hoặc sử dụng từ khóa del

clear[] Xóa toàn bộ các phần tử từ điển

friend_ages = {"Rolf": 24, "Adam": 30, "Anne": 27}
print[friend_ages["Adam"]] # Kết quả là 30
1

popitem[] Xóa một ngẫu nhiên phần tử

pop[] Xóa một phần tử với khóa cho trước từ điển

friend_ages = {"Rolf": 24, "Adam": 30, "Anne": 27}
print[friend_ages["Adam"]] # Kết quả là 30
2

xóa một phần tử hoặc xóa chắc chắn các biến chứa từ điển

friend_ages = {"Rolf": 24, "Adam": 30, "Anne": 27}
print[friend_ages["Adam"]] # Kết quả là 30
3

1. 4 A number of method in Dictionary

1. 4. 1 Phương thức. sao chép[]

Phương thức này trả về một bản sao riêng biệt. Chú ý, phương thức. copy[] has other point so with gán biến trong Python. Chúng ta cùng xem ví dụ sau

friend_ages = {"Rolf": 24, "Adam": 30, "Anne": 27}
print[friend_ages["Adam"]] # Kết quả là 30
4

Như vậy, với phương thức. copy[] toàn bộ bộ nhớ liên quan đến biến friend_ages được sao chép sang một vùng khác trong bộ nhớ, vậy biến cũ thay đổi thì biến mới không thay đổi do tham chiếu đến vùng nhớ khác trên bộ nhớ. Còn khi gán giá trị bằng dấu =, biến đó vẫn tham chiếu đến vùng nhớ của biến cũ, nên khi biến cũ thay đổi, biến mới cũng thay đổi theo

1. 4. 2 Phương thức. được[]

Trả về giá trị của một phần tử trong Từ điển với một từ khóa cho trước, nó giống với truy xuất giá trị tại mục 1. 2 nhưng có một biệt thự nhỏ khác, nếu từ khóa không tồn tại, chương trình sẽ không báo lỗi mà trả lại giá trị Không có

friend_ages = {"Rolf": 24, "Adam": 30, "Anne": 27}
print[friend_ages["Adam"]] # Kết quả là 30
5

1. 4. 3 Phương thức. keys[] and. giá trị[]

Hai phương thức này trả về danh sách khóa và danh sách các giá trị của từ điển. Ví dụ

friend_ages = {"Rolf": 24, "Adam": 30, "Anne": 27}
print[friend_ages["Adam"]] # Kết quả là 30
6

So sánh List, Tuple, Set và Dictionary

Bạn đã giới thiệu 4 cấu trúc dữ liệu có trong Python là Danh sách, Tuple, Bộ và Từ điển, có vẻ như hơi nhiều vấn đề. Trong từng bài viết, chúng ta đã có những so sánh hai khái niệm với nhau, giờ là lúc chúng ta tổng hợp lại toàn bộ những gì đã học về 4 cấu trúc dữ liệu này

Cách mạng

  • [giá trị_1, giá trị_2, …, giá trị_n]. Khai báo danh sách [List]
  • [giá trị_1, giá trị_2, …, giá trị_n]. Khai báo Tuple
  • {value_1, value_2, …, value_n}. Khai báo tập hợp [Set]
  • {key_1. giá trị_1, khóa_2. giá trị_2, …, key_n. giá trị_n}. Khai báo từ điển [Dictionary]

Sau khi làm quen với 4 cấu trúc List, Tuple, Set và Dictionary, có thể bạn sẽ rất hoa mắt. Nên chọn cấu trúc nào để phù hợp với chương trình của bạn?

Sau đó, chúng ta cùng đúc kết để có được câu trả lời cho. Khi nào sử dụng List, Tuple, Set hay Dictionary trong Python?

Chủ Đề