我有几个包含值的列表。就像下面一样。
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']]