Hướng dẫn từ điển Python: Phương thức, ví dụ và mẫu chung

  1. Trang chủ
  2. Blog
  3. Phát triển phần mềm

Phát triển phần mềm

Hướng dẫn từ điển Python: Phương thức, ví dụ và mẫu chung

Từ điển có ở mọi nơi trong Python, từ phản hồi JSON đến cấu hình. Tìm hiểu cách tạo, đọc và cập nhật chúng, sau đó chọn các mẫu đếm, nhóm và hợp nhất mà bạn sẽ sử dụng trong các dự án thực tế.

Đọc 9 phút
Hướng dẫn từ điển Python: phương pháp, ví dụ và mẫu phổ biến

Điểm chính

  • Từ điển Python lưu trữ các cặp khóa và giá trị, đồng thời tra cứu một giá trị bằng khóa của nó rất nhanh.
  • Sử dụng get() khi một phím có thể bị thiếu, vì dấu ngoặc vuông tăng lên KeyError.
  • Các khóa phải có thể băm được, chẳng hạn như chuỗi, số hoặc bộ dữ liệu. Danh sách không thể là chìa khóa.
  • copy() không sâu nên dữ liệu lồng nhau vẫn được chia sẻ trừ khi bạn sử dụng deepcopy.

Nếu danh sách là một hàng hộp được đánh số thì Từ điển Python là tập hợp các hộp được gắn nhãn. Bạn yêu cầu những gì bạn muốn theo tên chứ không phải vị trí, đó là lý do tại sao từ điển nằm sau dữ liệu JSON, cấu hình, bộ đệm và phần lớn chính Python.

Hướng dẫn này bắt đầu với những điều cơ bản và chuyển sang các mẫu mà các nhà phát triển có kinh nghiệm sử dụng hàng ngày. Chúng tôi đã chạy tất cả các ví dụ trên Python 3.13 và kết quả hiển thị là từ lần chạy đó.

Từ điển là gì?

Từ điển hoặc dict ánh xạ khóa thành giá trị. Mỗi khóa chỉ xuất hiện một lần và giá trị có thể là bất kỳ thứ gì, kể cả danh sách hoặc từ điển khác.

Loại Truy cập bởi Đã đặt hàng trùng lặp Tốt nhất cho
danh sách Vị trí Có Được phép trình tự
bộ đồ Vị trí Có Được phép Bản ghi cố định
đặt Chỉ thành viên Không Không được phép Vật phẩm độc đáo
mệnh lệnh Chìa khóa Thứ tự chèn Chìa khóa là duy nhất Tra cứu theo tên

Kể từ Python 3.7, từ điển chính thức giữ nguyên thứ tự chèn. Nhiều hướng dẫn cũ vẫn gọi chúng là không có thứ tự, điều này không còn đúng nữa. Để so sánh rộng hơn về các loại khác, hãy xem Danh sách Python so với bộ dữ liệu so với tập hợp.

Tra cứu nhanh chóng vì từ điển sử dụng bảng băm. Việc kiểm tra một khóa mất khoảng thời gian gần như bằng nhau cho dù từ điển chứa mười mục hay một triệu mục, trong khi việc tìm kiếm danh sách sẽ chậm hơn khi danh sách tăng lên.

Tạo một từ điển

user = {"name": "Asha", "age": 31, "city": "Pune"}

empty = {}
from_keywords = dict(name="Asha", age=31)
from_pairs = dict([("a", 1), ("b", 2)])

Niềng răng xoăn là hình thức phổ biến nhất. Một cái bẫy: {} tạo một từ điển trống chứ không phải một bộ trống. Đối với một bộ trống, bạn cần set().

Đọc giá trị một cách an toàn

Có hai cách để đọc một giá trị và sự khác biệt quan trọng khi khóa có thể không tồn tại:

user["name"]                  # 'Asha'
user["email"]                 # KeyError: 'email'

user.get("email")             # None
user.get("email", "not set")  # 'not set'

Sử dụng dấu ngoặc vuông khi khóa phải tồn tại để phím bị thiếu sẽ không thành công. Sử dụng get() khi sự vắng mặt là bình thường, chẳng hạn như trường tùy chọn trong phản hồi API. Để kiểm tra khóa, hãy sử dụng toán tử in, xem xét các khóa thay vì giá trị:

"city" in user    # True
"Pune" in user    # False

Thêm, cập nhật và xóa

Việc gán cho một khóa sẽ cập nhật khóa đó nếu nó tồn tại hoặc thêm nó nếu không:

user["age"] = 32
user["email"] = "asha@example.com"
print(user)

# {'name': 'Asha', 'age': 32, 'city': 'Pune', 'email': 'asha@example.com'}

Python cung cấp một số cách để xóa các mục:

user.pop("city")          # returns 'Pune' and removes it
user.pop("phone", None)   # no error if it is missing
del user["email"]         # removes it, and raises KeyError if missing
user.clear()              # empties the dictionary

Sử dụng pop() khi bạn muốn lấy lại giá trị. Việc chuyển một giá trị mặc định làm đối số thứ hai sẽ tránh được lỗi khi không có khóa. popitem() xóa và trả về cặp được thêm gần đây nhất.

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

Vòng lặp trực tiếp cung cấp cho bạn các phím. Để nhận cả khóa và giá trị, hãy sử dụng items():

user = {"name": "Asha", "age": 32}

for key, value in user.items():
    print(key, "=", value)

# name = Asha
# age = 32

keys(), values() và items() trả về chế độ xem trực tiếp thay vì bản sao, do đó chúng phản ánh những thay đổi sau này. Không thêm hoặc xóa khóa trong khi lặp qua từ điển, vì Python sẽ tăng RuntimeError. Lặp lại list(user) nếu bạn cần làm điều đó.

Mẹo: Việc kiểm tra in trên từ điển rất nhanh, nhưng "Pune" in user.values() phải quét mọi giá trị. Nếu bạn làm điều này thường xuyên với dữ liệu lớn, từ điển của bạn có thể bị khóa sai.

Bảng cheat phương pháp từ điển

phương pháp Nó làm gì
được(k, mặc định) Trả về một giá trị hoặc giá trị mặc định nếu thiếu khóa
keys() Trả về chế độ xem các phím
values() Trả về chế độ xem các giá trị
items() Trả về chế độ xem các cặp khóa và giá trị
update(other) Thêm hoặc ghi đè từ một từ điển khác
pop(k, mặc định) Xóa một khóa và trả về giá trị của nó
popitem() Xóa và trả về cặp được thêm cuối cùng
setdefault(k, v) Trả về giá trị và chèn v đầu tiên nếu thiếu khóa
copy() Trả về một bản sao nông
clear() Xóa mọi thứ
dict.fromkeys(phím, v) Xây dựng một từ điển từ danh sách các khóa

Hợp nhất từ điển

Một nhu cầu chung là áp dụng cài đặt người dùng lên trên các giá trị mặc định. Khi các phím chạm nhau, bên tay phải thắng:

defaults = {"theme": "light", "lang": "en"}
saved = {"theme": "dark"}

defaults | saved
{**defaults, **saved}

# Both give: {'theme': 'dark', 'lang': 'en'}

Toán tử | cần Python 3.9 trở lên, trong khi phiên bản ** cũng hoạt động trên các phiên bản cũ hơn. Cả hai đều tạo ra một từ điển mới. Ngược lại, defaults.update(saved) và defaults |= saved thay đổi defaults tại chỗ.

Hiểu biết và sắp xếp

Tính năng hiểu từ điển xây dựng một từ điển mới trong một dòng duy nhất có thể đọc được, giống như hiểu danh sách đối với danh sách:

prices = {"pen": 10, "book": 250, "bag": 900}

{k: v for k, v in prices.items() if v > 100}
# {'book': 250, 'bag': 900}

Để sắp xếp theo giá trị, chuyển hàm key cho sorted(). Để tìm khóa có giá trị lớn nhất, hãy sử dụng max():

sorted(prices.items(), key=lambda item: item[1], reverse=True)
# [('bag', 900), ('book', 250), ('pen', 10)]

max(prices, key=prices.get)
# 'bag'

Từ điển không có phương thức sort() và sorted() trả về danh sách các cặp. Gói kết quả vào dict() nếu bạn muốn có từ điển theo thứ tự đó.

Đếm và nhóm các mẫu

Hai nhiệm vụ xuất hiện liên tục. Đầu tiên là đếm, bạn có thể thực hiện bằng cách sử dụng get() với giá trị mặc định là 0:

words = "to be or not to be".split()

counts = {}
for word in words:
    counts[word] = counts.get(word, 0) + 1

print(counts)
# {'to': 2, 'be': 2, 'or': 1, 'not': 1}

Thư viện tiêu chuẩn làm cho việc này thậm chí còn ngắn hơn với Counter:

from collections import Counter

Counter(words).most_common(2)
# [('to', 2), ('be', 2)]

Thứ hai là nhóm và defaultdict ở đây lý tưởng vì nó tạo ra giá trị còn thiếu cho bạn:

from collections import defaultdict

orders = [("Asha", 1200), ("Ben", 300), ("Asha", 800)]

by_customer = defaultdict(list)
for name, total in orders:
    by_customer[name].append(total)

print(dict(by_customer))
# {'Asha': [1200, 800], 'Ben': [300]}

Nếu không có nó, bạn sẽ cần kiểm tra xem từng khóa có tồn tại hay không trước khi thêm vào. Các mẫu tương tự này hoạt động tốt để tổng hợp dữ liệu API hoặc dòng nhật ký. Khi từ điển trống hoặc thiếu khóa, hướng dẫn của chúng tôi về Xử lý ngoại lệ Python sẽ chỉ ra cách xử lý kết quả KeyError.

Dữ liệu lồng nhau và bẫy sao chép

JSON ánh xạ trực tiếp tới các từ điển và danh sách lồng nhau, do đó bạn sẽ thường xuyên xâu chuỗi các khóa. Chuỗi get() giữ điều này an toàn khi thiếu một cấp độ:

response = {"user": {"profile": {"city": "Pune"}}}

response["user"]["profile"]["city"]               # 'Pune'
response.get("user", {}).get("settings", {}).get("theme")   # None

Hãy cẩn thận khi sao chép dữ liệu lồng nhau. copy() chỉ sao chép cấp cao nhất, vì vậy các từ điển bên trong vẫn được chia sẻ với bản gốc:

settings = {"db": {"host": "localhost"}}

shallow = settings.copy()
shallow["db"]["host"] = "prod"

print(settings["db"]["host"])
# prod

Việc thay đổi bản sao đã thay đổi bản gốc, đây có thể là một lỗi khó chịu. Sử dụng copy.deepcopy(settings) để có được một bản sao hoàn toàn độc lập.

Chìa khóa từ điển có thể là gì?

Khóa phải có thể băm được, thường có nghĩa là không thể thay đổi. Các chuỗi, số và bộ giá trị bất biến đều hoạt động. Danh sách và từ điển không:

{["a"]: 1}

# TypeError: unhashable type: 'list'

Lý do là hàm băm của khóa quyết định nơi lưu trữ giá trị của nó. Nếu một khóa có thể thay đổi, Python sẽ không thể tìm thấy nó nữa. Nếu bạn cần một khóa ghép, hãy sử dụng một bộ dữ liệu, chẳng hạn như {("Pune", 2026): 120}.

Những lỗi thường gặp

  • Sử dụng dấu ngoặc vuông trên các phím tùy chọn. Hãy sử dụng get() khi có thể không có phím.
  • Giả sử get() có nghĩa là khóa tồn tại. None có thể có nghĩa là bị thiếu hoặc được lưu trữ None. Sử dụng in khi có sự khác biệt quan trọng.
  • Sử dụng một giá trị mặc định có thể thay đổi. dict.fromkeys(names, []) cung cấp cho mọi khóa một danh sách giống nhau. Thay vào đó hãy sử dụng một sự hiểu biết.
  • Thay đổi kích thước trong quá trình lặp lại. Lặp lại bản sao của các phím.
  • Sử dụng lệnh cho các trường cố định, đã biết. A dataclass có thể rõ ràng hơn và phát hiện lỗi chính tả trong tên trường.

Lời kết

Từ điển khen thưởng một chút thực hành. Ghi get() cho các phím tùy chọn, items() cho vòng lặp và Counter và defaultdict cho hai công việc phổ biến nhất. Để thực hành, hãy lấy một tệp JSON nhỏ và viết mã để đếm và nhóm các bản ghi của nó. Nếu bạn chưa quen với ngôn ngữ này, hãy bắt đầu với Hướng dẫn Python dành cho người mới bắt đầu của chúng tôi.

Câu hỏi thường gặp

Từ điển trong Python là gì?

Từ điển là một bộ sưu tập tích hợp để lưu trữ các cặp khóa và giá trị. Bạn tra cứu một giá trị bằng khóa của nó, việc này nhanh chóng ngay cả với lượng dữ liệu lớn.

Từ điển Python có được sắp xếp theo thứ tự không?

Đúng. Kể từ Python 3.7, từ điển được đảm bảo giữ nguyên thứ tự các khóa được chèn vào. Cập nhật khóa hiện có không làm thay đổi vị trí của nó.

Sự khác biệt giữa get() và dấu ngoặc vuông là gì?

Dấu ngoặc vuông tăng KeyError khi thiếu phím. get() trả về Không có hoặc giá trị mặc định mà bạn cung cấp để phù hợp với các khóa tùy chọn.

Từ điển có thể có khóa trùng lặp không?

Không. Mỗi khóa là duy nhất. Việc gán cho một khóa hiện có sẽ thay thế giá trị của nó và nếu một chữ lặp lại một khóa thì giá trị cuối cùng sẽ thắng.

Làm cách nào để hợp nhất hai từ điển trong Python?

Sử dụng | b trên Python 3.9 trở lên hoặc {**a, **b} trên các phiên bản cũ hơn. Cả hai đều xây dựng một từ điển mới và các giá trị từ b sẽ thắng khi các phím xung đột.

Tiếp tục học hỏi

Làm việc với Stack Quora

Cần trợ giúp về kiểm tra, WordPress hoặc SEO?

Chúng tôi giúp các nhóm phát triển phần mềm tốt hơn và phát triển trang web của họ. Hãy cho chúng tôi biết bạn đang làm gì và chúng tôi sẽ đề xuất bước tiếp theo rõ ràng.

Tiếp tục đọc

Thêm hướng dẫn về thử nghiệm, AI và phát triển hiện đại

Bạn thích bài viết này? Chọn một chủ đề và chuyển ngay sang phần hướng dẫn mới nhất của chúng tôi.

Trí tuệ nhân tạo

Giải thích về ảo giác AI: Tại sao các mô hình ngôn ngữ lại tạo nên mọi thứ và cách giảm thiểu nó

Ảo giác AI đã giải thích: chúng là gì, tại sao mô hình ngôn ngữ tạo ra chúng, các loại phổ biến, cách giảm thiểu chúng bằng cách căn cứ và nhắc nhở …

Đọc bài viết →
DevOps

Giải thích về các biến môi trường: Tệp .env, bí mật và cấu hình được thực hiện đúng

Các biến môi trường được giải thích bằng các ví dụ Python mà chúng tôi đã chạy: đọc và thiết lập chúng, tại sao mọi giá trị đều là một chuỗi, tệp .e…

Đọc bài viết →
Phát triển phần mềm

Giải thích về giới hạn tỷ lệ API: Thuật toán, tiêu đề và xử lý lỗi 429

Giới hạn tốc độ API được giải thích bằng mô phỏng mà chúng tôi đã chạy: nhóm mã thông báo, cửa sổ cố định, cửa sổ trượt, 429 phản hồi, tiêu đề giới …

Đọc bài viết →
Tự động hóa kiểm thử

Chế giễu bằng Python: unittest.mock, patch và những sai lầm khiến bài kiểm tra nói dối

Mô phỏng bằng Python với unittest.mock, đã được thử nghiệm: Mock và return_value, side_effect, vá lỗi nơi sử dụng tên, thông số kỹ thuật và thông số…

Đọc bài viết →
Kiểm thử phần mềm

Giải thích về phạm vi bảo hiểm của mã: Phạm vi tuyến so với chi nhánh và ý nghĩa thực sự 100%

Phạm vi bảo hiểm mã được giải thích bằng cách chạy phạm vi bảo hiểm thực tế: phạm vi bảo hiểm dòng, chi nhánh và điều kiện, đọc báo cáo, lý do tại s…

Đọc bài viết →
Cơ sở dữ liệu & SQL

DELETE vs TRUNCATE vs DROP trong SQL: Sự khác biệt, khôi phục và thời điểm sử dụng mỗi loại

DELETE vs TRUNCATE vs DROP được giải thích bằng SQL đã được thử nghiệm: mỗi loại loại bỏ, khôi phục, kích hoạt, đặt lại danh tính, tốc độ và Postgre…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích về Chế độ xem SQL: Tạo, sử dụng và tránh những cạm bẫy, kèm theo ví dụ

Chế độ xem SQL được giải thích bằng các truy vấn chúng tôi đã chạy: tạo chế độ xem, kết quả trực tiếp, ẩn cột, hiệu suất, chế độ xem có thể cập nhật…

Đọc bài viết →
Phát triển phần mềm

Giao diện TypeScript so với loại: Sự khác biệt thực sự, được thử nghiệm bằng trình biên dịch

Giao diện TypeScript so với loại, được kiểm tra bằng trình biên dịch thực: cả hai có thể làm gì, chỉ một người có thể làm gì, hợp nhất khai báo, mở …

Đọc bài viết →
Phát triển phần mềm

Giải thích về Python *args và **kwargs: Hàm linh hoạt với ví dụ rõ ràng

Python *args và **kwargs được giải thích bằng mã chúng tôi đã chạy: đóng gói và giải nén, thứ tự tham số, đối số chỉ từ khóa và chỉ vị trí, trình tr…

Đọc bài viết →
Phát triển phần mềm

Hàm Lambda của Python: Cú pháp, cách sử dụng thực tế và khi nào không nên sử dụng chúng

Các hàm lambda của Python được giải thích bằng mã chúng tôi đã chạy: cú pháp, sắp xếp bằng khóa, bản đồ và bộ lọc, các phần đóng, bẫy liên kết muộn …

Đọc bài viết →
Trí tuệ nhân tạo

Đại lý AI là gì? Cách chúng hoạt động, với vòng lặp tác nhân đơn giản, bạn có thể chạy

Tác nhân AI là gì? Hướng dẫn đơn giản về vòng lặp tác nhân, công cụ, bộ nhớ và lan can, với một vòng lặp Python nhỏ mà chúng tôi đã chạy, những rủi …

Đọc bài viết →
DevOps

Giám sát và Khả năng quan sát: Sự khác biệt thực sự, với nhật ký, số liệu và dấu vết

Giải thích về giám sát và khả năng quan sát: lỗi đã biết và chưa biết, nhật ký, số liệu và dấu vết, hướng dẫn về sự cố thanh toán, tín hiệu vàng, Op…

Đọc bài viết →
DevOps

Docker Volumes vs Bind Mounts: Duy trì dữ liệu vùng chứa đúng cách

Giải thích về khối lượng Docker và liên kết gắn kết: tại sao dữ liệu vùng chứa biến mất, khối lượng được đặt tên, liên kết gắn kết, tmpfs, ví dụ về …

Đọc bài viết →
Tự động hóa kiểm thử

TDD vs BDD: Key Differences, One Feature Built Both Ways and When to Use Each

TDD và BDD được giải thích bằng một tính năng giảm giá được xây dựng theo cả hai cách: tái cấu trúc màu đỏ-xanh với mã chúng tôi đã chạy, kịch bản C…

Đọc bài viết →
Kiểm thử phần mềm

Kiểm tra chấp nhận của người dùng (UAT): Quy trình, danh sách kiểm tra và ví dụ thực tế

Giải thích về thử nghiệm chấp nhận của người dùng: ai chạy nó, nó khác với QA như thế nào, quy trình bảy bước, mẫu trường hợp thử nghiệm UAT, danh s…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích về các giá trị NULL của SQL: IS NULL, COALESCE, NULLIF và những cái bẫy cần tránh

Các giá trị SQL NULL được giải thích bằng các truy vấn chúng tôi đã chạy: logic ba giá trị, IS NULL, COALESCE, NULLIF, cách tổng hợp, kết hợp và sắp…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Câu lệnh SQL CASE WHEN: Cú pháp, ví dụ thực tế và các lỗi thường gặp

TRƯỜNG HỢP SQL KHI được giải thích bằng các truy vấn mà chúng tôi đã chạy: các biểu mẫu đơn giản và được tìm kiếm, thứ tự điều kiện, các thủ thuật S…

Đọc bài viết →
Phát triển phần mềm

JWT là gì? Mã thông báo Web JSON được giải thích bằng một ví dụ hoạt động

JWT là gì? Mã thông báo Web JSON đã giải thích: ba phần, mã thông báo được xây dựng và giả mạo trong mã chúng tôi đã chạy, JWT so với phiên, lưu trữ…

Đọc bài viết →
Phát triển phần mềm

Giải thích về vòng lặp sự kiện JavaScript: Ngăn xếp cuộc gọi, Microtask và bộ hẹn giờ kèm ví dụ

Vòng lặp sự kiện JavaScript được giải thích bằng mã chúng tôi đã chạy: ngăn xếp cuộc gọi, hàng đợi tác vụ và vi nhiệm, tại sao setTimeout 0 không di…

Đọc bài viết →
Phát triển phần mềm

Giải thích về trình tạo và năng suất của Python: Tiết kiệm bộ nhớ bằng các ví dụ thực tế

Trình tạo và lợi nhuận Python được giải thích bằng mã chúng tôi đã chạy: cách chúng tạm dừng và tiếp tục, đo mức tiết kiệm bộ nhớ, quy trình, chuỗi …

Đọc bài viết →
Trí tuệ nhân tạo

Nhúng là gì? Giải thích sự tương đồng về vectơ và Cosine một cách đơn giản

nhúng là gì? Hướng dẫn bằng ngôn ngữ đơn giản về vectơ, độ tương tự cosine và tìm kiếm ngữ nghĩa, với một ví dụ nhỏ mà chúng tôi đã chạy, các cách s…

Đọc bài viết →
DevOps

Triển khai Blue-Green và Canary: Sự khác biệt, sự đánh đổi và cách lựa chọn

Giải thích về triển khai Blue-green và Canary: cách hoạt động của từng loại, chi phí, rủi ro và khôi phục, nhóm người dùng ổn định mà chúng tôi đã t…

Đọc bài viết →
Tự động hóa kiểm thử

Kiểm tra không ổn định: Nguyên nhân gây ra chúng và cách khắc phục chúng vĩnh viễn

Các thử nghiệm không ổn định được giải thích bằng các bản demo mà chúng tôi đã chạy: nguyên nhân chính, cách xác nhận và chẩn đoán nguyên nhân, cách…

Đọc bài viết →
Kiểm thử phần mềm

Kiểm tra tải và kiểm tra căng thẳng: Sự khác biệt, số liệu và ví dụ về k6

Giải thích về thử nghiệm tải và thử nghiệm căng thẳng: mỗi thử nghiệm chứng minh điều gì, thử nghiệm tăng đột biến và ngâm, số liệu quan trọng, lý d…

Đọc bài viết →
Kiểm thử phần mềm

Trường hợp thử nghiệm và kịch bản thử nghiệm: Sự khác biệt chính, ví dụ và thời điểm sử dụng từng trường hợp

Giải thích trường hợp kiểm thử và kịch bản kiểm thử: định nghĩa rõ ràng, bảng cạnh nhau, một tính năng đặt lại mật khẩu được lấy từ các tình huống n…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Tối ưu hóa truy vấn SQL: Đọc kế hoạch thực thi và sửa các truy vấn chậm, có tính thời gian

Đã thử nghiệm tối ưu hóa truy vấn SQL trên một triệu hàng: đọc kế hoạch thực hiện, thêm chỉ mục phù hợp, sửa các bộ lọc không thể mở rộng, sử dụng c…

Đọc bài viết →
Cơ sở dữ liệu & SQL

SQL UNION và UNION ALL: Sự khác biệt, ví dụ và hiệu suất đã được kiểm tra

SQL UNION và UNION ALL được giải thích bằng các truy vấn chúng tôi đã chạy: trùng lặp, cả hai quy tắc đều tuân theo, lỗi dữ liệu thực, hiệu suất đượ…

Đọc bài viết →
Phát triển phần mềm

Hướng dẫn API tìm nạp JavaScript: GET, POST, Xử lý lỗi và hết thời gian chờ

Hướng dẫn API tìm nạp JavaScript đã được thử nghiệm trên máy chủ cục bộ: GET và POST, tại sao 404 không gửi, trình trợ giúp có thể sử dụng lại, chuỗ…

Đọc bài viết →
Phát triển phần mềm

Xử lý tệp Python: Đọc, ghi, CSV, JSON và pathlib kèm ví dụ

Việc xử lý tệp Python được giải thích bằng mã chúng tôi đã chạy: chế độ mở, với, đọc tệp lớn, CSV, JSON, pathlib, tệp nhị phân, ghi an toàn, xử lý l…

Đọc bài viết →
Phát triển phần mềm

Các lớp và đối tượng Python: Hướng dẫn OOP với các ví dụ thực tế

Các lớp và đối tượng Python được giải thích bằng mã mà chúng tôi đã chạy: __init__, các phương thức, thuộc tính lớp và phiên bản, tính kế thừa, thuộ…

Đọc bài viết →
Trí tuệ nhân tạo

Mô hình ngôn ngữ lớn là gì? LLM hoạt động như thế nào, được giải thích mà không cường điệu hóa

Mô hình ngôn ngữ lớn là gì? LLM được giải thích bằng ngôn ngữ đơn giản: mã thông báo, phần nhúng, sự chú ý, đào tạo, cửa sổ nhiệt độ và ngữ cảnh, mộ…

Đọc bài viết →
DevOps

Các lệnh Linux cho người mới bắt đầu: Hướng dẫn thiết bị đầu cuối cần thiết kèm ví dụ

Các lệnh Linux dành cho người mới bắt đầu, được nhóm theo tác vụ: điều hướng, tệp, xem nhật ký, grep, đường dẫn, quyền, quy trình và lưu trữ, cùng v…

Đọc bài viết →
Tự động hóa kiểm thử

Selenium vs Nhà viết kịch: Sự khác biệt chính, So sánh mã và nên chọn cái nào

Selenium và Playwright được so sánh: kiến trúc, chờ đợi, hỗ trợ trình duyệt và ngôn ngữ, gỡ lỗi, kiểm tra giống nhau ở cả hai công cụ, lời khuyên di…

Đọc bài viết →
Kiểm thử phần mềm

Phân vùng tương đương: Giải thích kỹ thuật thiết kế thử nghiệm bằng các ví dụ đã thực hiện

Giải thích về phân vùng tương đương: cách tìm các phân vùng hợp lệ và không hợp lệ, các ví dụ hoạt động theo độ tuổi, mật khẩu và phiếu giảm giá, cá…

Đọc bài viết →
Kiểm thử phần mềm

Mức độ nghiêm trọng và mức độ ưu tiên trong kiểm thử phần mềm: Sự khác biệt, Ma trận và ví dụ thực tế

Giải thích về mức độ nghiêm trọng và mức độ ưu tiên trong kiểm thử phần mềm: định nghĩa rõ ràng, ma trận bốn chiều với các ví dụ, thang đo cấp độ, a…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Hướng dẫn về truy vấn con SQL: Các loại, truy vấn con tương quan và TỒN TẠI kèm ví dụ

Hướng dẫn về truy vấn con SQL với các truy vấn chúng tôi đã chạy: truy vấn con vô hướng, IN, FROM và SELECT, truy vấn con tương quan, EXISTS, bẫy và…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích về giao dịch SQL và ACID: Các mức CAM KẾT, ROLLBACK và Cô lập

Các giao dịch SQL và ACID được giải thích bằng chuyển khoản ngân hàng mà chúng tôi đã thực hiện: CAM KẾT, ROLLBACK, điểm lưu trữ, khóa, mức cách ly,…

Đọc bài viết →
Phát triển phần mềm

Bảng cheat lệnh Git: Các lệnh bạn thực sự sử dụng, kèm theo ví dụ

Một bảng ghi lệnh Git được nhóm theo nhiệm vụ: thiết lập, dàn dựng, nhánh, điều khiển từ xa, lưu trữ, lịch sử và hoàn tác các lỗi, với đầu ra từ kho…

Đọc bài viết →
Phát triển phần mềm

Giải thích về các lời hứa trong JavaScript: then, Catch, Promise.all và các lỗi thường gặp

Lời hứa JavaScript được giải thích bằng mã chúng tôi đã chạy: trạng thái, then và chuỗi bắt, xử lý lỗi, Promise.all, allSettled, chủng tộc và bất kỳ…

Đọc bài viết →
Phát triển phần mềm

Hướng dẫn từ điển Python: Phương thức, ví dụ và mẫu chung

Hướng dẫn từ điển Python với mã chúng tôi đã chạy: tạo, đọc và cập nhật các ký tự, các phương thức chính, hợp nhất, hiểu, đếm và nhóm các mẫu cũng n…

Đọc bài viết →
Trí tuệ nhân tạo

RAG là gì? Giải thích về thế hệ tăng cường truy xuất bằng một ví dụ hoạt động

RAG là gì? Thế hệ tăng cường truy xuất được giải thích từng bước: lập chỉ mục, phân nhóm, nhúng, truy xuất, một ví dụ Python hoạt động nhỏ, đánh giá…

Đọc bài viết →
DevOps

Hướng dẫn về Terraform cho người mới bắt đầu: Cơ sở hạ tầng dưới dạng mã từ tệp đầu tiên đến mô-đun

Hướng dẫn về Terraform dành cho người mới bắt đầu: bắt đầu không cần tài khoản đám mây, tìm hiểu về init, lập kế hoạch và áp dụng, sau đó là các biế…

Đọc bài viết →
DevOps

Docker vs Kubernetes: Key Differences, How They Work Together and Which You Need

Docker vs Kubernetes giải thích: mỗi cái làm gì, cùng một ứng dụng chạy với cả hai, so sánh Docker Compose và Swarm, sự thay đổi của dockershim và c…

Đọc bài viết →
Tự động hóa kiểm thử

Hướng dẫn Pytest cho người mới bắt đầu: Đồ đạc, tham số hóa và ví dụ thực tế

Hướng dẫn về pytest dành cho người mới bắt đầu với các bài kiểm tra chúng tôi đã chạy trên pytest 9.2: xác nhận, đồ đạc, tham số, conftest, điểm đán…

Đọc bài viết →
Kiểm thử phần mềm

Vòng đời kiểm thử phần mềm (STLC): 6 giai đoạn, tiêu chí đầu vào và đầu ra, ví dụ

Vòng đời kiểm thử phần mềm giải thích: sáu giai đoạn STLC với tiêu chí đầu vào và đầu ra, sản phẩm phân phối, ví dụ về tính năng đăng nhập hoạt động…

Đọc bài viết →
Phát triển phần mềm

Git merge vs rebase: khác biệt, ví dụ và khi nào dùng cái nào

Git merge vs rebase được giải thích bằng đầu ra log thực tế, bảng so sánh, quy tắc vàng của rebase và quy trình làm việc nhóm an toàn.

Đọc bài viết →
Phát triển phần mềm

List comprehension trong Python: cú pháp, ví dụ và khi nào nên tránh

List comprehension trong Python: cú pháp, lọc dữ liệu, if-else, vòng lặp lồng nhau, thời gian đo thực tế và khi nào vòng lặp for thông thường tốt hơn.

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích SQL JOIN kèm ví dụ (Inner, Left, Right, Full)

Hiểu SQL JOIN từng bước với bảng và truy vấn mẫu: INNER, LEFT, RIGHT, FULL, CROSS và SELF, cùng lỗi thường gặp và mẹo hiệu năng.

Đọc bài viết →