如何比较多个无序列表,并在有匹配值的情况下获得列表名称



我有几个包含值的列表。就像下面一样。

Alc=['P-111127759','111157751','1123104714']
FItems=['1123104714','797917266','79791761','79791765','79791763']
kuVItem=['1110234713','161231437','756623557','1123104714','7630672177', '754955924','712969245','963176673','181104711']
Products=['7171523315','Pqw-805967111','1150596117','115596116']
WProducts=['PQ-4559678','7171523315','5505296117','755961146']

如果列表中有类似的值,我基本上想找出列表名称。例如,Alc、FItems和kuVItem列表具有相同的值";1123104714";。所以我基本上希望这些名字成对出现。我是说像这个

['Alc', 'FItems'],['Alc', 'kuVItem'],['FItems','kuVItem']

在python中有办法做到这一点吗?

提前感谢!感谢您的帮助!

我假设这些值将通过字典提供(对于名称经常更改的命名值,这是我能想到的唯一方法(。

然后只需遍历键,对于每个键,将值与其他条目进行比较。由于我们只是想知道是否存在重叠,set.intersection()是一个很好的工具。

我的代码最终是:

my_dict = {
'Alc':['P-111127759','111157751','1123104714'],
'FItems':['1123104714','797917266','79791761','79791765','79791763'],
'kuVItem':['1110234713','161231437','756623557','1123104714','7630672177', '754955924','712969245','963176673','181104711'],
'Products':['7171523315','Pqw-805967111','1150596117','115596116'],
'WProducts':['PQ-4559678','7171523315','5505296117','755961146']}

results = []
for key in my_dict:
for key2 in my_dict:
if key != key2:
intersection = set.intersection(set(my_dict[key]), set(my_dict[key2]))
if len(intersection) > 0:
if [key2, key] not in results and [key, key2] not in results:
results.append([key, key2])
print(results)

哪个输出[['Alc', 'FItems'], ['Alc', 'kuVItem'], ['FItems', 'kuVItem'], ['Products', 'WProducts']]

复制的完整代码

import itertools
dict_of_lists = {
'a' : [1,3],
'b' : [3,4],
'c' : [3,6]
}
def common_data(list1, list2):
result = False
# traverse in the 1st list
for x in list1:
# traverse in the 2nd list
for y in list2:
# if one common
if x == y:
result = True
return result
return result
result_list = list(map(dict, itertools.combinations(list_of_lists.items(), 2)))
print(result_list)
pairs_commons_elements = []
for element in result_list:
if(common_data(list_of_lists[list(element.keys())[0]],list_of_lists[list(element.keys())[1]])):
pairs_common_elements.append(list(element.keys()))
print(pairs_common_elements)

解释

首先,我会把你所有的清单都放在一个清单清单中,我这样做是为了得到一个更通用的答案,因为你的具体问题已经给出了答案。

dict_of_lists = {
'a' : [1,3],
'b' : [3,4],
'c' : [3,6]
}

我们定义了"公共数据",用于检查这两个列表是否有任何共同的元素:

def common_data(list1, list2):
result = False
# traverse in the 1st list
for x in list1:
# traverse in the 2nd list
for y in list2:
# if one common
if x == y:
result = True
return result
return result

为了能够使用这个函数,我们需要首先列出每个可能的dict键对(itertools.combinations((管理这个(:

result_list = list(map(dict, itertools.combinations(list_of_lists.items(), 2)))

最后,我们遍历每一个可能的对,并检查它们是否有任何共同的元素。如果是,我们将它们添加到pairsCommonElements列表中。

pairs_common_elements = []

if(common_data(list_of_lists[list(element.keys())[0]],list_of_lists[list(element.keys())[1]])):
pairs_common_elements.append(list(element.keys()))
print(pairs_common_elements)

输出[['a', 'b'], ['a', 'c'], ['b', 'c']]

相关内容

最新更新