Nhóm danh sách python theo khóa

Trước khi gọi groupby, bạn cần sắp xếp dữ liệu của mình trước. Điều này sắp xếp các nhóm tại chỗ theo Id của loại nhóm

groups.sort[key=lambda x: x[1].Id]

Và sau đó trong nhóm, bạn hiện đang trả về trình vòng lặp thay vì danh sách các phần tử. Bạn có thể chuyển đổi nó thành một danh sách bằng cách gói nó với list[]. Bạn cũng sẽ cần sử dụng Id của loại nhóm thay vì chính loại nhóm đó trong biểu thức lambda

Gần đây, tôi gặp một vấn đề mà tôi phải nhóm các đối tượng của một danh sách theo giá trị thuộc tính của các đối tượng này. Sau khi thử một số thứ, tôi quyết định sử dụng hàm groupby từ mô-đun

letters = [
    Letter['a', True],
    Letter['b', False],
    Letter['c', False],
    Letter['d', False],
    Letter['e', True],
]
0

Hãy xem xét ví dụ sau, chúng ta có một lớp Letter với hai thuộc tính. một chuỗi để chỉ định ký tự và một boolean để chỉ định xem chữ cái đó có phải là nguyên âm hay không. Chúng tôi muốn nhóm các đối tượng Thư dựa trên thuộc tính

letters = [
    Letter['a', True],
    Letter['b', False],
    Letter['c', False],
    Letter['d', False],
    Letter['e', True],
]
1 của chúng

Lớp này trông như sau,

letters = [
    Letter['a', True],
    Letter['b', False],
    Letter['c', False],
    Letter['d', False],
    Letter['e', True],
]
2 chỉ ở đó để có một biểu diễn chuỗi gọn gàng khi sau này chúng ta in ra các đối tượng

class Letter:
    def __init__[self, char: str, vowel: bool] -> None:
        self.char = char
        self.vowel = vowel

    def __repr__[self] -> str:
        return self.char

Tiếp theo chúng ta tạo một danh sách với các đối tượng Letter. Không phải toàn bộ bảng chữ cái, vài chữ cái đầu tiên sẽ làm được

letters = [
    Letter['a', True],
    Letter['b', False],
    Letter['c', False],
    Letter['d', False],
    Letter['e', True],
]

Bây giờ chúng tôi nhóm danh sách

letters = [
    Letter['a', True],
    Letter['b', False],
    Letter['c', False],
    Letter['d', False],
    Letter['e', True],
]
3 của chúng tôi chứa các đối tượng
letters = [
    Letter['a', True],
    Letter['b', False],
    Letter['c', False],
    Letter['d', False],
    Letter['e', True],
]
0 dựa trên giá trị của thuộc tính
letters = [
    Letter['a', True],
    Letter['b', False],
    Letter['c', False],
    Letter['d', False],
    Letter['e', True],
]
1 của chúng. Việc nhóm này được thực hiện bởi hàm khóa mà chúng tôi chuyển đến groupby làm đối số thứ hai, danh sách chính nó là đối số đầu tiên

from itertools import groupby

sorted_letters = sorted[letters, key=lambda letter: letter.vowel]
grouped = [list[result] for key, result in groupby[
    sorted_letters, key=lambda letter: letter.vowel]]

print[grouped]
# => [[b, c, d], [a, e]]

Một vấn đề cần lưu ý là danh sách hoặc bất kỳ khả năng lặp nào khác cần được sắp xếp trước khi chuyển nó tới hàm groupby. Nếu không, các nhóm của bạn kết thúc với một kết quả được phân đoạn. Để minh họa, hãy xem ví dụ sau khi sắp xếp được nhận xét. Như bạn thấy, groupby tạo thành các nhóm liên tiếp

Viết chương trình Python để tạo một từ điển nhóm một chuỗi các cặp khóa-giá trị thành một danh sách từ điển

Giải pháp mẫu

Mã Python

def grouping_dictionary[l]:
    result = {}
    for k, v in l:
         result.setdefault[k, []].append[v]
    return result
colors = [['yellow', 1], ['blue', 2], ['yellow', 3], ['blue', 4], ['red', 1]]
print["Original list:"]
print[colors]
print["\nGrouping a sequence of key-value pairs into a dictionary of lists:"]
print[grouping_dictionary[colors]]

Đầu ra mẫu

Original list:
[['yellow', 1], ['blue', 2], ['yellow', 3], ['blue', 4], ['red', 1]]

Grouping a sequence of key-value pairs into a dictionary of lists:
{'yellow': [1, 3], 'blue': [2, 4], 'red': [1]}

Trình bày bằng hình ảnh


Sơ đồ

Trực quan hóa việc thực thi mã Python

Công cụ sau đây trực quan hóa những gì máy tính đang làm từng bước khi nó thực thi chương trình nói trên

Tôi có thể nhóm theo danh sách bằng Python không?

Trong Python, bạn có thể nhóm các phần tử liên tiếp có cùng giá trị trong một đối tượng có thể lặp lại, chẳng hạn như danh sách bằng itertools. groupby[] .

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

Danh sách nhóm dữ liệu từ điển theo khóa cụ thể trong Python có thể được thực hiện bằng cách sử dụng itertools. phương thức groupby[] .

Chúng ta có thể kết hợp từ điển nếu vậy làm thế nào?

Chúng ta có thể kết hợp hai từ điển trong python bằng cách hiểu từ điển . Ở đây, chúng tôi cũng sử dụng vòng lặp for để lặp qua các mục từ điển và hợp nhất chúng để có kết quả cuối cùng. Nếu cả hai từ điển đều có khóa chung, thì đầu ra cuối cùng sử dụng phương thức này sẽ chứa giá trị của từ điển thứ hai.

Chủ Đề