Dictionary comprehensions là một cách để tạo ra một dictionary bằng cách sử dụng cú pháp tương tự như list comprehensions. Nó cho phép ta tạo ra một dictionary mới bằng cách lặp qua các phần tử của một iterable và thực hiện một số xử lý trên mỗi phần tử đó.
Cú pháp của dictionary comprehensions giống như sau:
{key_expression: value_expression for element in iterable if condition}
Trong đó:
key_expression
là biểu thức để tính toán key cho từng cặp key-value trong dictionary mới.value_expression
là biểu thức để tính toán value cho từng cặp key-value trong dictionary mới.element
là biến lặp của iterable.iterable
là một iterable object như list, tuple, set, hoặc string.condition
là một điều kiện để lọc ra các phần tử của iterable (tùy chọn).
Dictionary comprehensions rất hữu ích khi bạn muốn tạo ra một dictionary mới mà không cần phải sử dụng vòng lặp và câu lệnh điều kiện.
Ví dụ 1:
# Tạo một dictionary với các key là các số nguyên và giá trị tương ứng là bình phương của chúng
squares = {num: num**2 for num in range(1, 6)}
print(squares) # output: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# Tạo một dictionary với các key là các chữ cái trong một chuỗi và giá trị tương ứng là số lần xuất hiện của chúng trong chuỗi
string = 'hello world'
char_counts = {char: string.count(char) for char in string}
print(char_counts) # output: {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
Trong ví dụ đầu tiên, chúng ta sử dụng dictionary comprehensions để tạo một dictionary với các key là các số nguyên từ 1 đến 5 và giá trị tương ứng là bình phương của chúng. Biểu thức {num: num**2 for num in range(1, 6)}
sẽ tạo ra một dictionary với các cặp key-value như sau: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
.
Trong ví dụ thứ hai, chúng ta sử dụng dictionary comprehensions để tạo một dictionary với các key là các ký tự trong một chuỗi và giá trị tương ứng là số lần xuất hiện của chúng trong chuỗi. Biểu thức {char: string.count(char) for char in string}
sẽ tạo ra một dictionary với các cặp key-value như sau: {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
. Cụ thể, với mỗi ký tự trong chuỗi, chúng ta sử dụng method count()
để đếm số lần xuất hiện của ký tự đó trong chuỗi và lưu kết quả vào dictionary với key tương ứng là ký tự đó.
Ví dụ 2:
Dưới đây là ví dụ về dictionary comprehensions khác và giải thích tương ứng:
# Tạo một dictionary với các key là các từ trong một chuỗi và giá trị tương ứng là số lần xuất hiện của chúng trong chuỗi
string = 'the quick brown fox jumps over the lazy dog'
word_counts = {word: string.count(word) for word in string.split()}
print(word_counts) # output: {'the': 2, 'quick': 1, 'brown': 1, 'fox': 1, 'jumps': 1, 'over': 1, 'lazy': 1, 'dog': 1}
Trong ví dụ này, chúng ta sử dụng dictionary comprehensions để tạo một từ điển với các từ làm khóa và số lần xuất hiện của mỗi từ trong chuỗi làm giá trị tương ứng. Để làm được điều này, chúng ta sử dụng phương thức split()
để tách chuỗi thành các từ riêng lẻ. Sau đó, chúng ta sử dụng dictionary comprehensions để lặp lại các từ và tính toán số lần xuất hiện của mỗi từ bằng cách sử dụng phương thức count()
của chuỗi gốc. Kết quả là một từ điển với các từ khác nhau trong chuỗi và số lần xuất hiện của mỗi từ.
Ví dụ 3:
Ví dụ về dictionary comprehensions trong quản trị hệ thống Linux:
- Tạo một dictionary chứa thông tin về các file trong thư mục hiện tại:
import os
# Lấy danh sách các file trong thư mục hiện tại
files = os.listdir()
# Tạo dictionary với key là tên file và value là kích thước của file
file_info = {file: os.path.getsize(file) for file in files}
print(file_info)
Output:
{
'file1.txt': 1024,
'file2.txt': 2048,
'file3.txt': 3072
}
Trong ví dụ này, chúng ta sử dụng os.listdir()
để lấy danh sách các file trong thư mục hiện tại. Sau đó, chúng ta sử dụng dictionary comprehensions để tạo một dictionary file_info
, với key là tên của mỗi file và value là kích thước của file đó, được lấy bằng os.path.getsize(file)
.
- Tạo một dictionary chứa thông tin về các user trên hệ thống:
import pwd
# Lấy danh sách các user trên hệ thống
users = pwd.getpwall()
# Tạo dictionary với key là username và value là UID của user
user_info = {user.pw_name: user.pw_uid for user in users}
print(user_info)
Output:
{
'root': 0,
'bin': 1,
'daemon': 2,
'adm': 3,
'lp': 4,
'sync': 5,
'shutdown': 6,
'halt': 7,
'mail': 8,
'news': 9,
'uucp': 10,
'operator': 11,
'man': 13,
'postmaster': 14,
'cron': 16,
'ftp': 21,
'sshd': 22,
'at': 25,
'squid': 31,
'xfs': 33,
'games': 35,
'cyrus': 76,
'www-data': 33,
'backup': 34,
'list': 38,
'irc': 39,
'gnats': 41,
'nobody': 65534
}
Trong ví dụ này, chúng ta sử dụng pwd.getpwall()
để lấy danh sách các user trên hệ thống. Sau đó, chúng ta sử dụng dictionary comprehensions để tạo một dictionary user_info
, với key là tên của mỗi user và value là UID của user đó, được lấy bằng thuộc tính pw_uid
của đối tượng user.