如何创建与多个字典或数组上出现的内容相匹配的新字典项? Python

问题描述

List 1
['DEF','ABC','MNM']
List 2: 
['DEF','MNM']
List 3:
['ABC','MNM']
List 4:
['DEF','MNM']
List 5:
['ABC','MNM']
List 6:
{'DEF': [1.34],'ABC': [0.44],'MNM': [0.77]}

我的目标是在这 6 个列表(如上所示的字典或数组)中找到匹配条目的子集。

  • 如果我将一个变量设置为至少匹配 6 次,我应该得到类似 final = {'MNM'} 的输出,因为 'MNM' 出现在上述所有内容中。

  • 如果我设置一个变量至少匹配 4 次,那么我应该得到 final = {'ABC','MNM'}

  • 如果我设置一个变量至少匹配 3 次,那么我应该得到 final = {'DEF','MNM'}

我不知道执行此操作的最有效方法是什么。感谢您的帮助!

解决方法

这是一个非常粗糙的代码,您可以对其进行更改:

List1 = ['DEF','ABC','MNM']
List2 = ['DEF','MNM']
List3 = ['ABC','MNM']
List4 = ['DEF','MNM']
List5 = ['ABC','MNM']
List6 = {'DEF': [1.34],'ABC': [0.44],'MNM': [0.77]}

mapper = {1: List1,2: List2,3: List3,4: List4,5: List5,6: List6}


def generate_elem_count():
    result_data = []
    for val in mapper.values():
        if type(val) == list:
            result_data += val
        elif type(val) == dict:
            for key in val:
                result_data.append(key)

    count_elem = {elem: result_data.count(elem) for elem in result_data}
    return count_elem


def get_from_min_match(var):
    temp = []
    count_elem = generate_elem_count()
    for item in count_elem:
        if var <= count_elem[item]:
            temp.append(item)
    return set(temp)


print(get_from_min_match(3))
print(get_from_min_match(4))
print(get_from_min_match(6))

# OUTPUT
# {'MNM','DEF','ABC'}
# {'MNM','ABC'}
# {'MNM'}

你的第二点也是错误的:“如果我将一个变量设置为至少匹配 4 次,那么我应该得到 final = {'ABC','MNM'}”。
它应该是 {'DEF','MNM'}