首页 > 解决方案 > 获取包含相同元素的列表分组的元组(或列表)列表?

问题描述

我在 python 中有一个包含多个列表的字典,我尝试做的是获取一个元组(或列表)列表,其中列表与相同的元素分组,无论它们是否被排序。例如:

dict_1 = {
    "pv_0": [1, 2, 3, 4, 5],
    "pv_1": [2, 4, 6, 8, 10],
    "pv_2": [1, 3, 5, 7, 9],
    "pv_3": [3, 4, 1, 2, 5],
    "pv_4": [2, 3, 4, 5, 6],
    "pv_5": [3, 4, 5, 6, 2],
    "pv_6": [1, 2, 3, 5, 4],
    "pv_7": [5, 9, 7, 3, 1],
    "pv_8": [2, 4, 6, 8, 10],
    "pv_9": [1, 3, 5, 6, 7],
}

我希望得到以下结果:

Result = [
    ("pv_0", "pv_3", "pv_6"),
    ("pv_2", "pv_7"),
    ("pv_1", "pv_8"),
    ("pv_4", "pv_5"),
    ("pv_9"),
]

我该如何解决这个问题?

标签: python

解决方案


据我所知,您需要一个键元组,其中每个值都相同。

def get_matching_keys(data: dict) -> list: 
    # first, make everything a set
    for key in data: 
        data [key] = set (data [key])  # makes order irrelevant
    results = []
    duplicates = []
    for key, value in data.items():
        if key in duplicates: continue  # we already did this
        result = [key]
        duplicates.append (key)
        for key2, value2 in data.items():
            if key == key2: continue  # skip the same key
            else: 
                if value == value2: 
                    result.append (key2)
                    duplicates.append (key2)  # make sure we don't do it again
        results.append (result)
    return results

推荐阅读