python - 如何创建与多个字典或数组上出现的内容匹配的新字典项?(Python)
问题描述
List 1
['DEF', 'ABC', 'MNM']
List 2:
['DEF', 'ABC', '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', 'ABC', 'MNM'}
我不知道执行此操作的最有效方法是什么。谢谢你的帮助!
解决方案
这是一个非常粗略的代码,您可以对其进行更改:
List1 = ['DEF', 'ABC', 'MNM']
List2 = ['DEF', 'ABC', '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', 'DEF', 'ABC'}
# {'MNM'}
您的第二点也是错误的:“如果我将一个变量设置为至少匹配 4 次,那么我应该得到 final = {'ABC', 'MNM'}”。
它应该是 {'DEF', 'ABC', 'MNM'}