Từ điển Python: Mẹo, thủ thuật và các thực tiễn tốt nhất

By hientd, at: 09:57 Ngày 24 tháng 4 năm 2023

Thời gian đọc ước tính: __READING_TIME__ minutes

Python Dictionary: Tips, Tricks, and Best Practices
Python Dictionary: Tips, Tricks, and Best Practices

1. Giới thiệu

 

Từ điển Python là một kiểu dữ liệu tích hợp sẵn được sử dụng để lưu trữ dữ liệu theo cặp khóa-giá trị. Mỗi cặp khóa-giá trị được gọi là một mục, và các từ điển được tạo bằng cách bao quanh các cặp khóa-giá trị trong dấu ngoặc nhọn {} được phân tách bằng dấu phẩy. Từ điển trong Python là có thể thay đổi, không có thứ tự, và có thể có các khóa thuộc bất kỳ kiểu dữ liệu bất biến nào.

Từ điển là một trong những cấu trúc dữ liệu được sử dụng thường xuyên nhất trong lập trình Python do tính linh hoạt và hiệu quả của chúng. Chúng cung cấp một cách để truy cập và thao tác dữ liệu nhanh chóng và hiệu quả, làm cho chúng trở thành một công cụ cần thiết cho các nhà phát triển trong nhiều lĩnh vực.

Trong bài viết này, chúng ta sẽ khám phá một số phương pháp tốt nhất, mẹo và thủ thuật để làm việc với từ điển Python. Vào cuối bài viết này, bạn sẽ được trang bị kiến thức để cải thiện kỹ năng từ điển Python của mình và viết mã hiệu quả hơn.
 

 

2. Lặp lại từ điển Python

 

Từ điển Python rất linh hoạt và cho phép các cách khác nhau để lặp lại nội dung của chúng.

Dưới đây là một số mẹo và thủ thuật về cách lặp lại các từ điển Python
 

 

2.1 Sử dụng vòng lặp for để lặp lại các từ điển

 

Một vòng lặp for có thể được sử dụng để lặp lại các khóa của một từ điển và sau đó truy cập các giá trị tương ứng.

Ví dụ

my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict:
   print(key, my_dict[key])

# Kết quả
a 1
b 2
c 3

 

2.2 Sử dụng biểu thức tạo từ điển để lặp lại các từ điển

 

Biểu thức tạo từ điển là một cách ngắn gọn để tạo một từ điển mới dựa trên một từ điển hiện có. Nó cũng có thể được sử dụng để lặp lại một từ điển và lọc các mục của nó.

Ví dụ

my_dict = {'a': 1, 'b': 2, 'c': 3}
new_dict = {key: value for key, value in my_dict.items() if value % 2 == 0}
print(new_dict)
#Kết quả
{'b': 2}

 

2.3 Sử dụng phương thức items() để lặp lại các khóa và giá trị

 

Phương thức items() trả về một đối tượng view chứa các bộ dữ liệu (khóa, giá trị) của từ điển. Nó có thể được sử dụng để lặp lại cả khóa và giá trị.

Ví dụ

my_dict = {'a': 1, 'b': 2, 'c': 3}
for key, value in my_dict.items():
   print(key, value)
# Kết quả
a 1
b 2
c 3

 

2.4 Sử dụng phương thức keys() để lặp lại các khóa

 

Phương thức keys() trả về một đối tượng view chứa các khóa của từ điển. Nó có thể được sử dụng để lặp lại chỉ các khóa.

Ví dụ

my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict.keys():
   print(key)
# Kết quả
a
b
c

 

2.5 Sử dụng phương thức values() để lặp lại các giá trị

 

Phương thức values() trả về một đối tượng view chứa các giá trị của từ điển. Nó có thể được sử dụng để lặp lại chỉ các giá trị.

Ví dụ

my_dict = {'a': 1, 'b': 2, 'c': 3}
for value in my_dict.values():
   print(value)
# Kết quả
1
2
3

 

2.6 Sử dụng hàm enumerate() để lặp lại các từ điển

 

Hàm enumerate() có thể được sử dụng để lặp lại một từ điển và trả về chỉ số và cặp (khóa, giá trị) tương ứng.

Ví dụ

my_dict = {'a': 1, 'b': 2, 'c': 3}
for index, (key, value) in enumerate(my_dict.items()):
   print(index, key, value)
# Kết quả
0 a 1
1 b 2
2 c 3

 

3. Thủ thuật từ điển Python

 

Từ điển Python là các cấu trúc dữ liệu mạnh mẽ đi kèm với một số phương thức và thủ thuật tích hợp sẵn có thể giúp bạn làm việc với chúng hiệu quả hơn. Dưới đây là một số thủ thuật hữu ích nhất để làm việc với từ điển Python
 

3.1 Trộn các từ điển bằng phương thức update()

 

Nếu bạn có hai từ điển có các khóa chồng chéo và bạn muốn hợp nhất chúng, bạn có thể sử dụng phương thức update(). Phương thức này nhận một từ điển khác làm đối số và thêm các cặp khóa-giá trị của nó vào từ điển gốc. Nếu một khóa đã tồn tại trong từ điển gốc, giá trị của nó sẽ được cập nhật bằng giá trị từ từ điển mới.

Ví dụ

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1)   
# Kết quả
{'a': 1, 'b': 3, 'c': 4}

 

3.2 Sử dụng phương thức get() để xử lý các khóa bị thiếu

 

Nếu bạn cố gắng truy cập một khóa không tồn tại trong một từ điển, bạn sẽ nhận được ngoại lệ KeyError. Để tránh điều này, bạn có thể sử dụng phương thức get(), phương thức này trả về giá trị cho một khóa nhất định nếu nó tồn tại trong từ điển và một giá trị mặc định nếu không.

Ví dụ

my_dict = {'a': 1, 'b': 2}
print(my_dict.get('c', 0)) 
# Kết quả
0


Trong ví dụ này, phương thức get() trả về 0 vì khóa 'c' không tồn tại trong từ điển.
 

3.3 Đặt giá trị mặc định bằng phương thức setdefault()

 

Phương thức setdefault() tương tự như phương thức get(), nhưng nó cũng đặt một giá trị mặc định cho một khóa nếu nó chưa tồn tại trong từ điển.

Ví dụ

my_dict = {'a': 1, 'b': 2}
my_dict.setdefault('c', 0)
print(my_dict) 
# Kết quả
{'a': 1, 'b': 2, 'c': 0}

Trong ví dụ này, phương thức setdefault() đặt giá trị của khóa 'c' thành 0 vì nó chưa tồn tại trong từ điển.
 

3.4 Xóa các mục trùng lặp bằng dict.fromkeys()

 

Nếu bạn có một danh sách với các giá trị trùng lặp và bạn muốn xóa chúng, bạn có thể sử dụng phương thức dict.fromkeys(). Phương thức này nhận một danh sách làm đối số và trả về một từ điển với các giá trị danh sách làm khóa và None làm giá trị mặc định.

Ví dụ

my_list = [1, 2, 2, 3, 3, 3]
my_dict = dict.fromkeys(my_list)
print(my_dict) 
# Kết quả
{1: None, 2: None, 3: None}

Trong ví dụ này, phương thức dict.fromkeys() trả về một từ điển với các giá trị duy nhất từ my_list.
 

3.5 Chuyển đổi hai danh sách thành một từ điển bằng dict()

 

Nếu bạn có hai danh sách có độ dài bằng nhau và bạn muốn kết hợp chúng thành một từ điển, bạn có thể sử dụng hàm tạo dict() với hàm zip(). Hàm zip() tạo ra một iterator tổng hợp các phần tử từ mỗi danh sách.

Ví dụ

keys = ['a', 'b', 'c']
values = [1, 2, 3]
my_dict = dict(zip(keys, values))
print(my_dict)  
# Kết quả
{'a': 1, 'b': 2, 'c': 3}


Trong ví dụ này, hàm zip() tạo ra một iterator tổng hợp các phần tử từ keys

Iterator sau đó được truyền vào hàm dict(), hàm này chuyển đổi nó thành một từ điển. Từ điển kết quả có các khóa từ danh sách keys và các giá trị từ danh sách values. Dưới đây là một đoạn mã ví dụ:

keys = ['name', 'age', 'city']
values = ['Joe', '25', 'New York']
my_dict = dict(zip(keys, values))
print(my_dict)
# Kết quả
{'name': 'Joe', 'age': '25', 'city': 'New York'}


Mã này tạo ra một từ điển có các khóa 'name', 'age' và 'city', và các giá trị 'Joe', '25' và 'New York', tương ứng.
 

3.6 Chuyển đổi danh sách thành từ điển bằng Zip

 

Ngoài việc sử dụng hàm dict() để chuyển đổi hai danh sách thành một từ điển, bạn cũng có thể sử dụng hàm zip(). Hàm zip() nhận hai hoặc nhiều danh sách và trả về một iterator của các bộ dữ liệu, trong đó mỗi bộ dữ liệu chứa các phần tử tương ứng từ mỗi danh sách.

Để chuyển đổi hai danh sách thành một từ điển bằng zip(), bạn chỉ cần truyền hai danh sách vào hàm zip(), và sau đó truyền iterator kết quả vào hàm dict().

Ví dụ

keys = ['a', 'b', 'c']
values = [1, 2, 3]
my_dict = dict(zip(keys, values))
print(my_dict)  
# Kết quả: {'a': 1, 'b': 2, 'c': 3}


Trong ví dụ này, hàm zip() tạo ra một iterator tổng hợp các phần tử từ keys và values thành các bộ dữ liệu. Iterator kết quả sau đó được truyền vào hàm dict(), hàm này chuyển đổi nó thành một từ điển. Từ điển kết quả ánh xạ các phần tử từ keys đến các phần tử tương ứng từ values.

Lưu ý rằng hàm zip() trả về một iterator của các bộ dữ liệu, vì vậy bạn cũng có thể sử dụng nó để tạo một danh sách các bộ dữ liệu, hoặc để lặp lại các bộ dữ liệu trực tiếp.
 

3.7 Kiểm tra xem một từ điển có rỗng hay không

 

Để kiểm tra xem một từ điển có rỗng hay không, bạn có thể sử dụng một câu lệnh if đơn giản.

Ví dụ

my_dict = {}
if not my_dict:
    print("Từ điển rỗng")
else:
    print("Từ điển không rỗng")
# Kết quả
Từ điển rỗng

Mã này khởi tạo một từ điển rỗng, kiểm tra xem nó có rỗng hay không bằng câu lệnh if và in ra thông báo tương ứng.
 

3.8 Sắp xếp một từ điển theo giá trị hoặc khóa

 

Bạn có thể sắp xếp một từ điển theo giá trị hoặc khóa của nó bằng hàm sorted(). Theo mặc định, hàm sorted() sắp xếp một từ điển theo khóa của nó. Tuy nhiên, bạn có thể sử dụng phương thức items() để sắp xếp một từ điển theo giá trị của nó. Dưới đây là một số ví dụ:

my_dict = {'a': 1, 'c': 3, 'b': 2}

# Sắp xếp theo khóa
sorted_dict = {k: my_dict[k] for k in sorted(my_dict)}
print(sorted_dict)

# Sắp xếp theo giá trị
sorted_dict = {k: v for k, v in sorted(my_dict.items(), key=lambda item: item[1])}
print(sorted_dict)
{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2, 'c': 3}


Trong ví dụ đầu tiên, chúng ta sắp xếp từ điển theo khóa của nó bằng hàm sorted(). Chúng ta tạo một từ điển mới với các khóa được sắp xếp theo thứ tự tăng dần và các giá trị tương ứng của chúng.

Trong ví dụ thứ hai, chúng ta sắp xếp từ điển theo giá trị của nó bằng hàm sorted() và hàm lambda làm khóa. Hàm lambda chỉ định rằng việc sắp xếp nên dựa trên phần tử thứ hai (giá trị) của mỗi mục trong từ điển. Chúng ta tạo một từ điển mới với các khóa theo cùng thứ tự với từ điển gốc và các giá trị tương ứng của chúng được sắp xếp theo thứ tự tăng dần.

Đây chỉ là một vài ví dụ về các mẹo và thủ thuật khác nhau mà bạn có thể sử dụng với từ điển Python. Bằng cách sử dụng các kỹ thuật này, bạn có thể viết mã hiệu quả hơn và trang nhã hơn và tận dụng tối đa các tính năng mạnh mẽ do từ điển Python cung cấp.

 

4. Mẹo, thủ thuật và lối tắt về từ điển Python cấp độ trung cấp

 

Từ điển Python là một cấu trúc dữ liệu mạnh mẽ được sử dụng để lưu trữ và thao tác các cặp khóa-giá trị. Chúng rất linh hoạt và dễ sử dụng, làm cho chúng trở thành lựa chọn phổ biến để lưu trữ và sắp xếp dữ liệu. Trong phần này, chúng ta sẽ đề cập đến một số mẹo, thủ thuật và lối tắt ở cấp độ trung cấp để sử dụng từ điển Python một cách hiệu quả.

 

4.1 Tạo một từ điển bằng một danh sách các bộ dữ liệu

 

Bạn có thể tạo một từ điển bằng một danh sách các bộ dữ liệu. Mỗi bộ dữ liệu trong danh sách biểu thị một cặp khóa-giá trị trong từ điển.

Ví dụ

my_list = [("apple", 1), ("banana", 2), ("orange", 3)]
my_dict = dict(my_list)
print(my_dict)
# Kết quả
{'apple': 1, 'banana': 2, 'orange': 3}

 

4.2 Sử dụng defaultdict cho các giá trị mặc định

 

Lớp defaultdict từ mô-đun collections cung cấp một cách thuận tiện để đặt các giá trị mặc định cho các khóa từ điển. Nếu không tìm thấy khóa trong từ điển, defaultdict sẽ trả về giá trị mặc định thay vì gây ra lỗi KeyError.

Ví dụ

from collections import defaultdict

my_dict = defaultdict(int)
my_dict["apple"] = 1
my_dict["banana"] = 2
print(my_dict["orange"])  
# Kết quả
0


Trong ví dụ này, chúng ta đặt giá trị mặc định là 0 bằng hàm int(). Nếu chúng ta cố gắng truy cập giá trị của một khóa không tồn tại trong từ điển, giá trị mặc định là 0 sẽ được trả về thay vì gây ra lỗi KeyError.
 

4.3 Sử dụng Counter để đếm các mục trong một từ điển

 

Lớp Counter từ mô-đun collections cung cấp một cách dễ dàng để đếm tần suất của các mục trong một từ điển.

Ví dụ

from collections import Counter

my_list = ['apple','red','apple','red','red','pear']
my_counter = Counter(my_list)
print(my_counter)
# Kết quả
Counter({'red': 3, 'apple': 2, 'pear': 1})


Trong ví dụ này, chúng ta tạo một đối tượng Counter từ danh sách my_list. Đối tượng Counter đếm tần suất của mỗi mục trong danh sách và trả về một từ điển mới, trong đó các khóa là các khóa từ điển gốc và các giá trị là số lần đếm.
 

4.4 Sử dụng sorted() để sắp xếp một từ điển theo giá trị hoặc khóa

 

Bạn có thể sử dụng hàm sorted() để sắp xếp một từ điển theo giá trị hoặc khóa.

Ví dụ

my_dict = {"apple": 1, "banana": 2, "orange": 3}
sorted_dict = sorted(my_dict.items(), key=lambda x: x[1]) # sắp xếp theo giá trị
print(sorted_dict)
# Kết quả
[('apple', 1), ('banana', 2), ('orange', 3)]


Trong ví dụ này, chúng ta sắp xếp từ điển theo giá trị bằng hàm lambda làm đối số key. Hàm lambda trả về giá trị của mỗi cặp khóa-giá trị, được sử dụng để sắp xếp. Để sắp xếp theo khóa, chúng ta chỉ cần bỏ qua hàm lambda.
 

4.5 Sử dụng max() và min() để tìm giá trị lớn nhất và nhỏ nhất trong một từ điển

 

Bạn có thể sử dụng các hàm max()min() để tìm giá trị lớn nhất và nhỏ nhất trong một từ điển.

Ví dụ

my_dict = {"apple": 1, "banana": 2, "orange": 3}
max_value = max(my_dict.values())
min_value = min(my_dict.values())
print(max_value, min_value)  
# Kết quả
3 1


Trong ví dụ này, chúng ta tìm giá trị lớn nhất và nhỏ nhất trong từ điển bằng các hàm max()min(), tương ứng.
 

4.6 Hợp nhất các từ điển bằng toán tử **

 

Python cung cấp một cách dễ dàng để hợp nhất các từ điển bằng toán tử **. Toán tử này cho phép bạn kết hợp hai hoặc nhiều từ điển thành một từ điển duy nhất. Toán tử ** cũng được gọi là toán tử "giải nén" vì nó giải nén nội dung của một từ điển.

Dưới đây là một ví dụ về cách hợp nhất hai từ điển bằng toán tử **:

dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
merged_dict = {**dict1, **dict2}
print(merged_dict)
# Kết quả
{'a': 1, 'b': 2, 'c': 3, 'd': 4}


Trong ví dụ này, toán tử ** được sử dụng để hợp nhất dict1dict2 thành merged_dict.
 

4.7 Loại bỏ các mục trùng lặp khỏi một từ điển bằng dict.fromkeys()

 

Đôi khi, bạn có thể có một từ điển với các giá trị trùng lặp và muốn xóa chúng. Bạn có thể sử dụng phương thức dict.fromkeys() để xóa các mục trùng lặp khỏi một từ điển.

Dưới đây là một ví dụ về cách xóa các mục trùng lặp khỏi một từ điển bằng phương thức dict.fromkeys():

d = {'a': 1, 'b': 2, 'c': 1}
deduped_dict = dict.fromkeys(d)
print(deduped_dict)
# Kết quả
{'a': None, 'b': None, 'c': None}


Trong ví dụ này, dict.fromkeys() được sử dụng để tạo một từ điển mới deduped_dict với các khóa của từ điển gốc d và các giá trị được đặt thành None.
 

4.8 Sử dụng copy() để tạo một bản sao của một từ điển

 

Nếu bạn muốn tạo một bản sao của một từ điển, bạn có thể sử dụng phương thức copy(). Phương thức này trả về một từ điển mới với các cặp khóa-giá trị giống như từ điển gốc.

Dưới đây là một ví dụ về cách sử dụng phương thức copy() để tạo một bản sao của một từ điển:

original_dict = {'a': 1, 'b': 2}
copied_dict = original_dict.copy()
print(copied_dict)
# Kết quả
{'a': 1, 'b': 2}


Trong ví dụ này, phương thức copy() được sử dụng để tạo một bản sao của original_dict và gán nó cho copied_dict.
 

4.9 Sử dụng update() để thêm các cặp khóa-giá trị vào một từ điển

 

Phương thức update() được sử dụng để thêm các cặp khóa-giá trị vào một từ điển. Bạn có thể truyền một từ điển hoặc một iterable của các cặp khóa-giá trị vào phương thức update() để thêm chúng vào từ điển.

Dưới đây là một ví dụ về cách sử dụng phương thức update() để thêm các cặp khóa-giá trị vào một từ điển:

d = {'a': 1, 'b': 2}
d.update({'c': 3})
print(d)

# Kết quả
{'a': 1, 'b': 2, 'c': 3}


Trong ví dụ này, phương thức update() được sử dụng để thêm cặp khóa-giá trị {'c': 3} vào từ điển d.
 

4.10 Sử dụng pop() để xóa các cặp khóa-giá trị khỏi một từ điển

 

Phương thức pop() xóa và trả về giá trị cho một khóa nhất định từ một từ điển. Nếu không tìm thấy khóa trong từ điển, một giá trị mặc định tùy chọn có thể được cung cấp.

dictionary.pop(key[, default])


- key: Khóa cần tìm kiếm và xóa khỏi từ điển
- default: Giá trị cần trả về nếu không tìm thấy khóa trong từ điển. Nếu không được chỉ định và không tìm thấy khóa, nó sẽ gây ra lỗi KeyError

Ví dụ

my_dict = {'a': 1, 'b': 2, 'c': 3}
value = my_dict.pop('b')
print(value)   2
print(my_dict)   
# Kết quả
{'a': 1, 'c': 3}


Trong ví dụ trên, phương thức pop() xóa khóa 'b' và trả về giá trị của nó là 2. Từ điển được cập nhật chỉ chứa các cặp khóa-giá trị còn lại.

Điều quan trọng cần lưu ý là việc sử dụng pop() trên một từ điển rỗng sẽ gây ra lỗi KeyError, vì vậy tốt nhất là nên kiểm tra xem từ điển có rỗng hay không trước khi gọi phương thức.

my_dict = {}
value = my_dict.pop('b', 'giá_trị_mặc_định')
print(value)   
# Kết quả 
'giá_trị_mặc_định'


Trong ví dụ này, vì từ điển trống nên phương thức pop() trả về giá trị mặc định 'giá_trị_mặc_định'.
 

5. Mẹo để viết mã Python tốt hơn với từ điển

 

Từ điển Python là các cấu trúc dữ liệu mạnh mẽ và linh hoạt có thể giúp bạn viết mã hiệu quả và dễ đọc. Dưới đây là một số mẹo để giúp bạn sử dụng từ điển một cách hiệu quả và viết mã Python tốt hơn:

5.1 Sử dụng List Comprehensions thay vì vòng lặp

 

List comprehensions là một cách ngắn gọn và hiệu quả để tạo danh sách và từ điển trong Python. Chúng nhanh hơn và dễ đọc hơn so với các vòng lặp for truyền thống và có thể giúp đơn giản hóa mã của bạn.
Ví dụ, thay vì viết:

squares = {}
for i in range(10):
    squares[i] = i ** 2


Bạn có thể sử dụng list comprehension để đạt được kết quả tương tự với ít mã hơn:

squares = {i: i ** 2 for i in range(10)}

 

5.2 Sử dụng các hàm tích hợp sẵn để đơn giản hóa mã của bạn

 

Python có nhiều hàm tích hợp sẵn có thể giúp bạn viết mã đơn giản hơn và dễ đọc hơn. Ví dụ, hàm sum() có thể được sử dụng để tính tổng các giá trị trong một từ điển:

my_dict = {'a': 1, 'b': 2, 'c': 3}
total = sum(my_dict.values())

 

5.3 Tránh lạm dụng từ điển

 

Một lỗi thường gặp khi làm việc với từ điển là lạm dụng chúng. Mặc dù từ điển có thể là những công cụ mạnh mẽ, nhưng chúng cũng có thể quá phức tạp và không cần thiết đối với các tác vụ đơn giản.

Ví dụ, nếu bạn chỉ cần lưu trữ một lượng nhỏ dữ liệu, thì việc sử dụng biến thay vì từ điển có thể hiệu quả hơn.

# Thay vì sử dụng một từ điển để lưu trữ các biến, chỉ cần định nghĩa chúng
name = "Joe"
age = 25
gender = "Male"

 

5.4 Sử dụng tên biến mô tả

 

Tên biến mô tả có thể làm cho mã của bạn dễ hiểu và dễ bảo trì hơn. Khi làm việc với từ điển, điều quan trọng là phải sử dụng các khóa rõ ràng và mô tả để làm cho dữ liệu dễ truy cập hơn.

Ví dụ

# Sử dụng các khóa mô tả để lưu trữ dữ liệu trong một từ điển
person = {"
Tag list:
- Python
- Best Practices
- List Comprehension
- Tips
- Python List
- Python Learning Sources
- Tips and Tricks
- Python Dictionary

Liên quan

Python Unit Test

Đọc thêm
Python

Đọc thêm
Python

Đọc thêm

Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.