Hướng dẫn python group similar strings in list - python nhóm các chuỗi tương tự trong danh sách

Tôi đã phải vật lộn sáng nay với một vấn đề tại văn phòng.

Tôi cần tìm một cách để nhóm nhóm cùng nhau từ một danh sách. Thật khó để giải thích vì vậy đây là một ví dụ:

Giả sử tôi có một danh sách như sau:

['MONTREAL EDUCATION BOARD', 'Île de Montréal', 'Montréal',
       'Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal',
       'Toronto', 'Toronto city', 'Tornoto', 'What is this', 'Bananasplit',
       'Banana', 'StLouis', 'St-Louis', 'Saint Louis']

Tôi cần tìm cách nhóm các giá trị này lại với nhau tùy thuộc vào sự giống nhau của chúng:

[['MONTREAL EDUCATION BOARD'],
 ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
 ['Toronto', 'Toronto city', 'Tornoto'],
 ['anything'],
 ['Bananasplit', 'Banana'],
 ['StLouis', 'St-Louis', 'Saint Louis']
]

Đó sẽ là trường hợp hoàn hảo. Rõ ràng nó có thể có lỗi [và ý chí]. Tôi cần phải làm điều này với khoảng 10 000 danh sách chứa từ 5 đến 15 000 chuỗi mỗi chuỗi. Tôi cần giảm thiểu lỗi và nhận được các nhóm tốt nhất tôi có thể.

Tôi đang sử dụng một phiên bản sửa đổi một chút của fuzzywuzzy. Đầu tiên tôi tháo các điểm nhấn và tận dụng tất cả các chữ cái cho một khoảng cách Levenshtein chính xác hơn.

Những gì tôi đã thử là đặt một ngưỡng [giả sử 80], lặp lại trong danh sách, tạo ra một nhóm ra khỏi mỗi chuỗi và lấy ra các yếu tố nhân đôi. Rõ ràng đây không phải là kết quả tôi cần vì tôi cần mọi yếu tố chỉ xuất hiện trong một danh sách [và đó không phải là trường hợp vì A có thể được liên kết với B, B đến C nhưng không phải là A đến C].

    groups = []
    for curr in lst:
        curr_grp = []
        for item in lst:
            ratio = normalized.partial_ratio[curr, item]
            if ratio > SET_THRESHOLD:
                curr_grp.append[[item, ratio]]

        groups.append[curr_grp]

Tôi nghĩ rằng có thể có một cách để tìm cấu hình tối ưu nhất từ ​​đầu ra của tôi:

[[['MONTREAL EDUCATION BOARD', 100],
  ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
  ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
  ['Mont-réal', 89]],
 [['Île de Montréal', 100],
  ['Montréal', 100],
  ['Ville de Montréal', 93],
  ['Monrtéal', 88],
  ['Mont-réal', 94]],
 [['MONTREAL EDUCATION BOARD', 100],
  ['Île de Montréal', 100],
  ['Montréal', 100],
  ['Ville de Montréal', 100],
  ['MONTREAL CITY', 100],
  ['Monrtéal', 88],
  ['Mont-réal', 88]],
 [['Île de Montréal', 93],
  ['Montréal', 100],
  ['Ville de Montréal', 100],
  ['Monrtéal', 88],
  ['Mont-réal', 94]],
 [['Montréal', 100],
  ['MONTREAL CITY', 100],
  ['Monrtéal', 88],
  ['Mont-réal', 89]],
 [['MONTREAL EDUCATION BOARD', 88],
  ['Île de Montréal', 88],
  ['Montréal', 88],
  ['Ville de Montréal', 88],
  ['MONTREAL CITY', 88],
  ['Monrtéal', 100]],
 [['MONTREAL EDUCATION BOARD', 89],
  ['Île de Montréal', 94],
  ['Montréal', 88],
  ['Ville de Montréal', 94],
  ['MONTREAL CITY', 89],
  ['Mont-réal', 100]],
 [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
 [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
 [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
 [['What is this', 100]],
 [['Bananasplit', 100], ['Banana', 100]],
 [['Bananasplit', 100], ['Banana', 100]],
 [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
 [['StLouis', 86], ['St-Louis', 100]],
 [['StLouis', 86], ['Saint Louis', 100]]]

Có thể tìm thấy tập hợp con tối ưu nhất của danh sách này trong đó mỗi phần tử chỉ xuất hiện trong một nhóm? [Vì vậy, với điểm số cao nhất?] Hãy xem xét rằng danh sách của tôi sẽ lớn hơn, vì vậy tôi không thể kiểm tra mọi cấu hình vì sẽ mất nhiều năm.

Khác, có một cách hiệu quả nào khác để làm những gì tôi đang cố gắng làm?

Cảm ơn bạn!

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc
    Method #1 : Using lambda + itertools.groupby[] + split[] 
    The combination of above three functions help us achieve the task. The split method is key as it defines the separator by which grouping has to be performed. The groupby function does the grouping of elements.
     

    Python3

    Bàn luận

    Đôi khi chúng tôi có một ứng dụng trong đó chúng tôi yêu cầu nhóm các chuỗi tiền tố chung thành một ứng dụng để xử lý thêm có thể được thực hiện theo nhóm. Loại nhóm này rất hữu ích trong các trường hợp học máy và phát triển web. Hãy để thảo luận về một số cách nhất định trong đó điều này có thể được thực hiện. Phương pháp phân chia là khóa vì nó định nghĩa phân tách theo nhóm phải được thực hiện. Hàm Groupby thực hiện nhóm các yếu tố. & NBSP;

        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    2

    from itertools import groupby

    test_list

    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    0
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    1
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    2
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    3
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    4
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    3
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    6
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    3
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    8
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    3__

        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    3
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    4
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    5
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    6
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    7____28

        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    9
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    0
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    1
    [[['MONTREAL EDUCATION BOARD', 100],
      ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
      ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
      ['Mont-réal', 89]],
     [['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 93],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['MONTREAL EDUCATION BOARD', 100],
      ['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 88]],
     [['Île de Montréal', 93],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 89]],
     [['MONTREAL EDUCATION BOARD', 88],
      ['Île de Montréal', 88],
      ['Montréal', 88],
      ['Ville de Montréal', 88],
      ['MONTREAL CITY', 88],
      ['Monrtéal', 100]],
     [['MONTREAL EDUCATION BOARD', 89],
      ['Île de Montréal', 94],
      ['Montréal', 88],
      ['Ville de Montréal', 94],
      ['MONTREAL CITY', 89],
      ['Mont-réal', 100]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
     [['What is this', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
     [['StLouis', 86], ['St-Louis', 100]],
     [['StLouis', 86], ['Saint Louis', 100]]]
    
    2
    [[['MONTREAL EDUCATION BOARD', 100],
      ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
      ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
      ['Mont-réal', 89]],
     [['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 93],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['MONTREAL EDUCATION BOARD', 100],
      ['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 88]],
     [['Île de Montréal', 93],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 89]],
     [['MONTREAL EDUCATION BOARD', 88],
      ['Île de Montréal', 88],
      ['Montréal', 88],
      ['Ville de Montréal', 88],
      ['MONTREAL CITY', 88],
      ['Monrtéal', 100]],
     [['MONTREAL EDUCATION BOARD', 89],
      ['Île de Montréal', 94],
      ['Montréal', 88],
      ['Ville de Montréal', 94],
      ['MONTREAL CITY', 89],
      ['Mont-réal', 100]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
     [['What is this', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
     [['StLouis', 86], ['St-Louis', 100]],
     [['StLouis', 86], ['Saint Louis', 100]]]
    
    3
    [[['MONTREAL EDUCATION BOARD', 100],
      ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
      ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
      ['Mont-réal', 89]],
     [['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 93],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['MONTREAL EDUCATION BOARD', 100],
      ['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 88]],
     [['Île de Montréal', 93],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 89]],
     [['MONTREAL EDUCATION BOARD', 88],
      ['Île de Montréal', 88],
      ['Montréal', 88],
      ['Ville de Montréal', 88],
      ['MONTREAL CITY', 88],
      ['Monrtéal', 100]],
     [['MONTREAL EDUCATION BOARD', 89],
      ['Île de Montréal', 94],
      ['Montréal', 88],
      ['Ville de Montréal', 94],
      ['MONTREAL CITY', 89],
      ['Mont-réal', 100]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
     [['What is this', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
     [['StLouis', 86], ['St-Louis', 100]],
     [['StLouis', 86], ['Saint Louis', 100]]]
    
    4

    [[['MONTREAL EDUCATION BOARD', 100],
      ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
      ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
      ['Mont-réal', 89]],
     [['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 93],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['MONTREAL EDUCATION BOARD', 100],
      ['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 88]],
     [['Île de Montréal', 93],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 89]],
     [['MONTREAL EDUCATION BOARD', 88],
      ['Île de Montréal', 88],
      ['Montréal', 88],
      ['Ville de Montréal', 88],
      ['MONTREAL CITY', 88],
      ['Monrtéal', 100]],
     [['MONTREAL EDUCATION BOARD', 89],
      ['Île de Montréal', 94],
      ['Montréal', 88],
      ['Ville de Montréal', 94],
      ['MONTREAL CITY', 89],
      ['Mont-réal', 100]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
     [['What is this', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
     [['StLouis', 86], ['St-Louis', 100]],
     [['StLouis', 86], ['Saint Louis', 100]]]
    
    8
    [[['MONTREAL EDUCATION BOARD', 100],
      ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
      ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
      ['Mont-réal', 89]],
     [['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 93],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['MONTREAL EDUCATION BOARD', 100],
      ['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 88]],
     [['Île de Montréal', 93],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 89]],
     [['MONTREAL EDUCATION BOARD', 88],
      ['Île de Montréal', 88],
      ['Montréal', 88],
      ['Ville de Montréal', 88],
      ['MONTREAL CITY', 88],
      ['Monrtéal', 100]],
     [['MONTREAL EDUCATION BOARD', 89],
      ['Île de Montréal', 94],
      ['Montréal', 88],
      ['Ville de Montréal', 94],
      ['MONTREAL CITY', 89],
      ['Mont-réal', 100]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
     [['What is this', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
     [['StLouis', 86], ['St-Louis', 100]],
     [['StLouis', 86], ['Saint Louis', 100]]]
    
    9 fuzzywuzzy0fuzzywuzzy1fuzzywuzzy2fuzzywuzzy3fuzzywuzzy4

        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    3
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    4fuzzywuzzy7
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    6
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    7from0
    The grouped list is : [[‘coder_2’, ‘coder_3’], [‘geek_1’, ‘geek_4’], [‘pro_3’]] 

    Đầu ra: & nbsp;
    Method #2 : Using lambda + itertools.groupby[] + partition[] 
    The similar task can also be performed replacing the split function with the partition function. This is more efficient way to perform this task as it uses the iterators and hence internally quicker.
     

    Python3

    Bàn luận

    Đôi khi chúng tôi có một ứng dụng trong đó chúng tôi yêu cầu nhóm các chuỗi tiền tố chung thành một ứng dụng để xử lý thêm có thể được thực hiện theo nhóm. Loại nhóm này rất hữu ích trong các trường hợp học máy và phát triển web. Hãy để thảo luận về một số cách nhất định trong đó điều này có thể được thực hiện. Phương pháp phân chia là khóa vì nó định nghĩa phân tách theo nhóm phải được thực hiện. Hàm Groupby thực hiện nhóm các yếu tố. & NBSP;

        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    2

    from itertools import groupby

    test_list

    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    0
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    1
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    2
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    3
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    4
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    3
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    6
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    3
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    8
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    3__

        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    3
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    4
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    5
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    6
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    7____28

        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    9
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    0
    [['MONTREAL EDUCATION BOARD'],
     ['Île de Montréal', 'Montréal','Ville de Montréal', 'MONTREAL CITY', 'Monrtéal', 'Mont-réal'],
     ['Toronto', 'Toronto city', 'Tornoto'],
     ['anything'],
     ['Bananasplit', 'Banana'],
     ['StLouis', 'St-Louis', 'Saint Louis']
    ]
    
    1
    [[['MONTREAL EDUCATION BOARD', 100],
      ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
      ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
      ['Mont-réal', 89]],
     [['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 93],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['MONTREAL EDUCATION BOARD', 100],
      ['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 88]],
     [['Île de Montréal', 93],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 89]],
     [['MONTREAL EDUCATION BOARD', 88],
      ['Île de Montréal', 88],
      ['Montréal', 88],
      ['Ville de Montréal', 88],
      ['MONTREAL CITY', 88],
      ['Monrtéal', 100]],
     [['MONTREAL EDUCATION BOARD', 89],
      ['Île de Montréal', 94],
      ['Montréal', 88],
      ['Ville de Montréal', 94],
      ['MONTREAL CITY', 89],
      ['Mont-réal', 100]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
     [['What is this', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
     [['StLouis', 86], ['St-Louis', 100]],
     [['StLouis', 86], ['Saint Louis', 100]]]
    
    2
    [[['MONTREAL EDUCATION BOARD', 100],
      ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
      ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
      ['Mont-réal', 89]],
     [['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 93],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['MONTREAL EDUCATION BOARD', 100],
      ['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 88]],
     [['Île de Montréal', 93],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 89]],
     [['MONTREAL EDUCATION BOARD', 88],
      ['Île de Montréal', 88],
      ['Montréal', 88],
      ['Ville de Montréal', 88],
      ['MONTREAL CITY', 88],
      ['Monrtéal', 100]],
     [['MONTREAL EDUCATION BOARD', 89],
      ['Île de Montréal', 94],
      ['Montréal', 88],
      ['Ville de Montréal', 94],
      ['MONTREAL CITY', 89],
      ['Mont-réal', 100]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
     [['What is this', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
     [['StLouis', 86], ['St-Louis', 100]],
     [['StLouis', 86], ['Saint Louis', 100]]]
    
    3
    [[['MONTREAL EDUCATION BOARD', 100],
      ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
      ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
      ['Mont-réal', 89]],
     [['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 93],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['MONTREAL EDUCATION BOARD', 100],
      ['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 88]],
     [['Île de Montréal', 93],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 89]],
     [['MONTREAL EDUCATION BOARD', 88],
      ['Île de Montréal', 88],
      ['Montréal', 88],
      ['Ville de Montréal', 88],
      ['MONTREAL CITY', 88],
      ['Monrtéal', 100]],
     [['MONTREAL EDUCATION BOARD', 89],
      ['Île de Montréal', 94],
      ['Montréal', 88],
      ['Ville de Montréal', 94],
      ['MONTREAL CITY', 89],
      ['Mont-réal', 100]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
     [['What is this', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
     [['StLouis', 86], ['St-Louis', 100]],
     [['StLouis', 86], ['Saint Louis', 100]]]
    
    4

    [[['MONTREAL EDUCATION BOARD', 100],
      ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
      ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
      ['Mont-réal', 89]],
     [['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 93],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['MONTREAL EDUCATION BOARD', 100],
      ['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 88]],
     [['Île de Montréal', 93],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 89]],
     [['MONTREAL EDUCATION BOARD', 88],
      ['Île de Montréal', 88],
      ['Montréal', 88],
      ['Ville de Montréal', 88],
      ['MONTREAL CITY', 88],
      ['Monrtéal', 100]],
     [['MONTREAL EDUCATION BOARD', 89],
      ['Île de Montréal', 94],
      ['Montréal', 88],
      ['Ville de Montréal', 94],
      ['MONTREAL CITY', 89],
      ['Mont-réal', 100]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
     [['What is this', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
     [['StLouis', 86], ['St-Louis', 100]],
     [['StLouis', 86], ['Saint Louis', 100]]]
    
    8
    [[['MONTREAL EDUCATION BOARD', 100],
      ['Montréal', 100], # Will probably have to use ratio[] and not partial_ratio[] because
      ['Monrtéal', 88],  # this can't happen, EDUCATION BOARD is NOT Montreal
      ['Mont-réal', 89]],
     [['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 93],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['MONTREAL EDUCATION BOARD', 100],
      ['Île de Montréal', 100],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 88]],
     [['Île de Montréal', 93],
      ['Montréal', 100],
      ['Ville de Montréal', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 94]],
     [['Montréal', 100],
      ['MONTREAL CITY', 100],
      ['Monrtéal', 88],
      ['Mont-réal', 89]],
     [['MONTREAL EDUCATION BOARD', 88],
      ['Île de Montréal', 88],
      ['Montréal', 88],
      ['Ville de Montréal', 88],
      ['MONTREAL CITY', 88],
      ['Monrtéal', 100]],
     [['MONTREAL EDUCATION BOARD', 89],
      ['Île de Montréal', 94],
      ['Montréal', 88],
      ['Ville de Montréal', 94],
      ['MONTREAL CITY', 89],
      ['Mont-réal', 100]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 100], ['Toronto city', 100], ['Tornoto', 86]],
     [['Toronto', 86], ['Toronto city', 86], ['Tornoto', 100]],
     [['What is this', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['Bananasplit', 100], ['Banana', 100]],
     [['StLouis', 100], ['St-Louis', 86], ['Saint Louis', 86]],
     [['StLouis', 86], ['St-Louis', 100]],
     [['StLouis', 86], ['Saint Louis', 100]]]
    
    9 fuzzywuzzy0fuzzywuzzy1fuzzywuzzy2fuzzywuzzy3fuzzywuzzy4

        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    3
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    4fuzzywuzzy7
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    6
        groups = []
        for curr in lst:
            curr_grp = []
            for item in lst:
                ratio = normalized.partial_ratio[curr, item]
                if ratio > SET_THRESHOLD:
                    curr_grp.append[[item, ratio]]
    
            groups.append[curr_grp]
    
    7from0
    The grouped list is : [[‘coder_2’, ‘coder_3’], [‘geek_1’, ‘geek_4’], [‘pro_3’]] 


    Làm thế nào để bạn nhóm các giá trị trong một danh sách trong Python?

    Với itertools.groupby [], chỉ các yếu tố liên tiếp của cùng một giá trị được nhóm lại.Để nhóm chúng bất kể đặt hàng, hãy sắp xếp danh sách ban đầu với Sắp xếp [].Khi sắp xếp một danh sách các danh sách, theo mặc định, danh sách được sắp xếp theo phần tử đầu tiên của mỗi danh sách.itertools. groupby[] , only consecutive elements of the same value are grouped. To group them regardless of order, sort the original list with sorted[] . When sorting a list of lists, by default, the list is sorted by the first element of each list.

    Làm thế nào để bạn nhóm các mục trong một danh sách?

    Nhóm các mục trong danh sách..
    Trên danh sách, về phía bên phải, nhấp vào biểu tượng nhóm:.....
    Sử dụng tiêu đề cột đã chọn của bạn, nhấp và kéo vào khu vực nhóm.....
    Để thêm một nhóm phụ, kéo lên tiêu đề cột thứ hai.....
    Để hiển thị các thành viên riêng lẻ của một nhóm, nhấp vào + Mở rộng ở đầu bên trái của tiêu đề nhóm ..

    Bài Viết Liên Quan

    Chủ Đề