Avatar
Ba
[LC] 2.7.4. Kỹ thuật đếm sử dụng từ điển

Sử dụng từ điển để đếm các phần tử trong chuỗi


Sau đây sẽ là một số cách để bạn có thể đếm số lượng phần tử trong một chuỗi sử dụng từ điển.

Cách 1: Sử dụng dict thông thường

Sử dụng dict thông thường để tạo một từ điển với mục tiêu đếm số lượng từng giá trị trong chuỗi.

  • Lặp qua các phần tử của chuỗi.
    • Nếu phần tử này tồn tại trong từ điển thì tăng giá trị của key này lên 1
    • Nếu phần tử này chưa tồn tại trong từ điển - tạo giá trị cho key này bằng 1.
def approach1(x):
  counter = dict()
  for item in x:
    # Nếu phần tử này tồn tại trong từ điển thì tăng giá trị của key này lên 1
    if item in counter:
      counter[item] += 1
    # Nếu phần tử này chưa tồn tại trong từ điển - tạo giá trị cho key này bằng 1
    else:
      counter[item] = 1
  return counter

Chạy thử code

x = 'abaabd'
result = approach1(x)
print('Kết quả: {}'.format(result))

Kết quả in ra:

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

Cách 2 - Sử dụng defaultdict

Để đơn giản quá trình kiểm tra key có tồn tại trong dictionary, Python cung cấp một hàm defaultdict cho phép chúng ta đếm key mà không cần kiểm tra key đó có tồn tại hay không.

Mặc định khi khởi tạo, key bất kỳ sẽ có giá trị 0.

import collections
def apporach2(x):
  counter = collections.defaultdict(int) # đầu vào của defaultdict có thể là int, list,...
  for item in x:
    counter[item] += 1
  return counter

Chạy thử code

x = 'abaabd'
result = approach2(x)
print('Kết quả: {}'.format(result))

Kết quả in ra:

Kết quả: defaultdict(<class 'int'>, {'a': 3, 'b': 2, 'd': 1})

Cách 3 - Sử dụng counter

Gói gọn toàn bộ việc đếm như trên mà không dùng vòng for - đây là một trong những hàm rất tiện mà thường được dùng thường xuyên ngay cả trong lập trình AI. Ví dụ bạn muốn xây dựng bộ từ điển cho NLP thì hàm này sẽ được sử dụng.

import collections
def approach3(x):
  counter = collections.Counter(x)
  return counter  

Chạy thử code

x = 'abaabd'
result = approach3(x)
print('Kết quả: {}'.format(result))

Kết quả in ra:

Kết quả: Counter({'a': 3, 'b': 2, 'd': 1})