Làm cách nào để nhận các giá trị duy nhất trong từ điển Python?

Làm cách nào để đếm các giá trị duy nhất trong danh sách Python?

Cách đơn giản nhất để đếm các giá trị duy nhất trong danh sách Python là chuyển đổi danh sách thành tập hợp xem xét rằng tất cả các phần tử của tập hợp là duy nhất. Bạn cũng có thể đếm các giá trị duy nhất trong danh sách bằng từ điển, các bộ sưu tập. Lớp truy cập, Numpy. độc đáo() hoặc Pandas. độc nhất()

Hầu hết các ví dụ của chúng tôi sẽ hoạt động trên cùng một danh sách các số

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]

Chúng tôi sẽ triển khai mọi cách tiếp cận theo chức năng riêng của nó để dễ dàng gọi chúng từ “phần chính” của mã của chúng tôi. Mọi chức năng lấy danh sách số làm đầu vào và trả về danh sách với các giá trị duy nhất

Sau đó, phần chính của chương trình sẽ đếm số lượng giá trị duy nhất bằng cách sử dụng phương thức list len()

Bắt đầu nào

Mục lục

1. Sử dụng vòng lặp For để đếm các giá trị duy nhất trong danh sách Python

Cách tiếp cận đầu tiên sử dụng vòng lặp Python for để duyệt qua tất cả các phần tử

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values

Vòng lặp for đi qua mọi phần tử của danh sách và thêm phần tử đó vào danh sách mới nếu nó chưa có trong danh sách mới

Hãy viết một đoạn mã chung để in kết quả do hàm này trả về để chúng ta có thể sử dụng khá nhiều đoạn mã tương tự để in kết quả do các hàm khác trả về mà chúng ta sẽ tạo trong các phần tiếp theo

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop(numbers)
number_of_unique_values = len(unique_values)
print("The list of unique values is: {}".format(unique_values))
print("The number of unique values is: {}".format(number_of_unique_values))

đầu ra là

The list of unique values is: [2, 3, 6, 8, 23, 24, 30, 45, 50, 51]
The number of unique values is: 10

Dòng duy nhất chúng ta sẽ phải cập nhật khi gọi một chức năng khác là như sau

unique_values = get_unique_list_with_for_loop(numbers)

Mọi thứ khác trong chương trình chính của chúng tôi sẽ giữ nguyên vì nó phụ thuộc vào biến unique_values

2. Đếm các giá trị duy nhất trong danh sách Python bằng một tập hợp

Tập hợp là một cấu trúc dữ liệu chỉ chứa các phần tử duy nhất. Chúng ta có thể sử dụng thuộc tính này của tập hợp để chỉ lấy lại các giá trị duy nhất

def get_unique_values_with_set(values):
    return set(values)

...
unique_values = get_unique_values_with_set(numbers)
...

Lưu ý dấu ngoặc nhọn trong đầu ra do hàm trả về một tập hợp

The list of unique values is: {2, 3, 6, 8, 45, 50, 51, 23, 24, 30}
The number of unique values is: 10

Bạn có thấy thứ tự của các phần tử đã thay đổi so với danh sách ban đầu không?

Đó là bởi vì…

Kiểu dữ liệu đã đặt không có thứ tự

Điểm hay của cách tiếp cận này là mã ngắn gọn hơn rất nhiều (chỉ là một hàm dòng đơn)

3. Sử dụng từ điển để lấy số lượng giá trị duy nhất trong danh sách

Chúng ta có thể sử dụng thực tế là các khóa từ điển là duy nhất để lấy các phần tử duy nhất từ ​​​​danh sách ban đầu không?

Chúng ta có thể tạo một từ điển trong đó các phần tử duy nhất trong danh sách là các khóa của từ điển. Các giá trị của từ điển là các bộ đếm cho chúng ta biết mỗi phần tử xuất hiện bao nhiêu lần trong danh sách

def get_unique_values_with_dictionary(values):
    new_values = {}

    for value in values:
        if value in new_values.keys():
            new_values[value] += 1
        else:
            new_values[value] = 1
    
    print(new_values)
    return new_values.keys()

...
unique_values = get_unique_values_with_dictionary(numbers)
...

Tại mỗi lần lặp của vòng lặp for, chúng tôi xác minh xem một giá trị cụ thể đã tồn tại dưới dạng khóa từ điển chưa. Nếu không, chúng tôi thêm khóa đó vào từ điển và chúng tôi đặt giá trị thành 1

Nếu không, chúng tôi tăng giá trị được liên kết với khóa hiện có trong từ điển

Tôi đã thêm một câu lệnh print() trong hàm để hiển thị cho bạn từ điển đã tạo

________số 8_______

4. bộ sưu tập. Bộ đếm để đếm các giá trị duy nhất trong danh sách

Cách tiếp cận tương tự được giải thích trong phần trước (sử dụng từ điển chuẩn) cũng có thể được triển khai bằng cách sử dụng lớp Counter của mô-đun Bộ sưu tập

Hãy tìm hiểu chính xác những gì Counter làm

>>> from collections import Counter
>>> Counter([1,2,3,3])
Counter({3: 2, 1: 1, 2: 1}) 

Thú vị…

Nó tạo ra một cấu trúc dữ liệu giống như từ điển trong đó các khóa là các phần tử của danh sách và các giá trị cho biết số lượng của từng phần tử trong danh sách gốc

Về cơ bản giống như những gì chúng ta đã tạo trong phần trước bằng cách sử dụng từ điển Python tiêu chuẩn

Hãy áp dụng nó vào danh sách các số của chúng ta

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values
0

Đây là những phương thức có sẵn cho đối tượng Counter

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values
1

Các. keys() là phương thức chúng ta cần để lấy các phần tử duy nhất trong danh sách ban đầu

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values
2

Vì vậy, chúng ta có thể thêm chức năng sau vào mã của mình

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values
3

đầu ra là

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values
4

Cũng giống như cách chúng ta đã thấy khi sử dụng tập hợp, với cách tiếp cận này, chúng ta có thể viết hàm một dòng

5. Đếm các giá trị duy nhất trong danh sách bằng NumPy

Thư viện NumPy cũng cung cấp cách đếm các giá trị duy nhất trong danh sách (hoặc mảng)

NumPy. duy nhất không chỉ cho phép tìm các phần tử duy nhất của một mảng mà còn cung cấp số lần mỗi phần tử có mặt bằng cách sử dụng tham số return_counts

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values
5

Vì vậy, hãy tạo một chức năng mới sử dụng np. độc nhất()

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values
6

Và đây là những yếu tố độc đáo chúng tôi lấy lại

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values
7

6. Sử dụng Pandas để nhận các giá trị duy nhất trong danh sách

Chúng tôi cũng có thể nhận các giá trị duy nhất trong danh sách bằng Pandas. Để làm điều đó, chúng tôi sẽ sử dụng pandas. độc nhất

Nó lấy đầu vào là một mảng một chiều, vì vậy hãy viết hàm của chúng ta

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values
8

Đầu ra được trả về bởi chương trình của chúng tôi là

def get_unique_values_with_for_loop(values):
    unique_values = []

    for value in values:
        if value not in unique_values:
            unique_values.append(value)

    return unique_values
7

7. Đếm các giá trị duy nhất trong danh sách từ điển

Hãy viết mã để làm điều gì đó phức tạp hơn một chút

Tôi có một danh sách các từ điển chứa cùng một khóa và tôi muốn lấy số lượng các giá trị duy nhất trên tất cả các từ điển trong danh sách

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop(numbers)
number_of_unique_values = len(unique_values)
print("The list of unique values is: {}".format(unique_values))
print("The number of unique values is: {}".format(number_of_unique_values))
0

Bước đầu tiên là lấy một danh sách chứa tất cả các giá trị trong mỗi từ điển. Để làm điều đó, chúng ta có thể sử dụng cách hiểu danh sách

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop(numbers)
number_of_unique_values = len(unique_values)
print("The list of unique values is: {}".format(unique_values))
print("The number of unique values is: {}".format(number_of_unique_values))
1

Bây giờ chúng ta có thể sử dụng một trong những phương pháp đã được sử dụng trước đây. Ví dụ: chúng ta có thể chuyển danh sách vào bộ sưu tập. Phản đối

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop(numbers)
number_of_unique_values = len(unique_values)
print("The list of unique values is: {}".format(unique_values))
print("The number of unique values is: {}".format(number_of_unique_values))
2

Có ý nghĩa?

8. Cái nào là cách tiếp cận nhanh hơn để đếm các giá trị danh sách duy nhất?

Chúng tôi sẽ hoàn thành hướng dẫn này bằng cách so sánh hiệu suất của tất cả các phương pháp chúng tôi đã triển khai để giải quyết vấn đề của mình

Để làm điều đó, chúng tôi sẽ tạo một danh sách với các phần tử ngẫu nhiên và sau đó sử dụng mô-đun timeit để đo thời gian thực hiện cho mỗi lần thực hiện

Chúng tôi sẽ tạo danh sách các số ngẫu nhiên bằng mô-đun ngẫu nhiên Python

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop(numbers)
number_of_unique_values = len(unique_values)
print("The list of unique values is: {}".format(unique_values))
print("The number of unique values is: {}".format(number_of_unique_values))
3

Đây chỉ là một ví dụ về danh sách chứa 10 số ngẫu nhiên từ 0 đến 9. Để đo lường hiệu suất của chức năng của chúng tôi, chúng tôi sẽ sử dụng một danh sách lớn hơn với các số ngẫu nhiên trong phạm vi rộng hơn

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop(numbers)
number_of_unique_values = len(unique_values)
print("The list of unique values is: {}".format(unique_values))
print("The number of unique values is: {}".format(number_of_unique_values))
4

Hãy lấy hàm đầu tiên mà chúng ta đã tạo, hàm sử dụng vòng lặp for. Đây là cách chúng ta có thể truyền nó vào hàm

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop(numbers)
number_of_unique_values = len(unique_values)
print("The list of unique values is: {}".format(unique_values))
print("The number of unique values is: {}".format(number_of_unique_values))
5

Tham số số đại diện cho số lần thực hiện

đầu ra là

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop(numbers)
number_of_unique_values = len(unique_values)
print("The list of unique values is: {}".format(unique_values))
print("The number of unique values is: {}".format(number_of_unique_values))
6

Để đo thời gian thực hiện cho mọi chức năng với time, chỉ cần bao quanh một chức năng đã cho với hai dòng sau giống như cách chúng ta đã thực hiện ở trên

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop(numbers)
number_of_unique_values = len(unique_values)
print("The list of unique values is: {}".format(unique_values))
print("The number of unique values is: {}".format(number_of_unique_values))
7

Hãy so sánh thời gian thực hiện giữa sáu cách tiếp cận được triển khai trong hướng dẫn này

numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop(numbers)
number_of_unique_values = len(unique_values)
print("The list of unique values is: {}".format(unique_values))
print("The number of unique values is: {}".format(number_of_unique_values))
8

Cách triển khai nhanh nhất là cách triển khai đầu tiên sử dụng vòng lặp Python for và hầu hết chúng đều có hiệu suất tương đương

Phần kết luận

Sau khi đọc bài viết này, bạn có rất nhiều cách khác nhau để đếm các giá trị duy nhất trong danh sách Python

Tôi hy vọng bạn thấy hướng dẫn này hữu ích để xem cách bạn có thể giải quyết cùng một vấn đề theo nhiều cách khác nhau bằng Python

Bạn thích giải pháp nào chúng tôi đã thực hiện hơn?

Bài viết liên quan

Làm cách nào để mở trình duyệt web bằng Python?

Làm việc với JSONPath trong Python. Hướng dẫn để làm quen với nó

4 cách hữu ích để liệt kê các tệp trong một thư mục với Python

Claudio Sabato

Tôi là Trưởng nhóm công nghệ, Kỹ sư phần mềm và Huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành Nhà phát triển siêu hạng

Làm cách nào để kiểm tra giá trị duy nhất trong từ điển Python?

Phương pháp #1. Sử dụng vòng lặp Trong phương pháp Naive để thực hiện tác vụ cụ thể này, chúng ta có thể kiểm tra từng giá trị và chèn từng giá trị vào danh sách/băm trong từ điển và khi tôi' .

Làm cách nào để lấy các khóa duy nhất trong từ điển Python?

Chương trình Python để lấy tất cả các khóa duy nhất từ ​​một bộ từ điển .
Một từ điển chứa cặp khóa & giá trị (đại diện cho khóa. value), một từ điển được tạo bằng cách cung cấp các phần tử trong dấu ngoặc nhọn ({}), được phân tách bằng dấu phẩy. .
Khóa trong từ điển hoạt động như một mã định danh cho cặp

Làm cách nào để in tất cả các giá trị duy nhất trong từ điển Python?

Để in tất cả các giá trị duy nhất trong danh sách từ điển. .
Sử dụng vòng lặp for để duyệt qua danh sách
Sử dụng vòng lặp for khác để lặp lại các giá trị của từng từ điển
Thêm các giá trị vào một đối tượng đã đặt
Lặp lại tập hợp và in các giá trị duy nhất

ID duy nhất trong từ điển Python là gì?

Hàm id() của Python trả về “danh tính” của đối tượng. Danh tính của một đối tượng là một số nguyên, được đảm bảo là duy nhất và không đổi đối với đối tượng này trong suốt thời gian tồn tại của nó . Hai đối tượng có thời gian tồn tại không chồng lấp có thể có cùng giá trị id().