字典在不同的键中找到相似的值

Dictionary finding similar value in different key

请帮忙,我有一本这样的字典:

sdata = {'A': [1, 2, 3, 4, 5, 6],'B': [11, 12, 3, 14, 15], 'C': [8, 9, 10, 1 ,2], 'D': [15, 3, 18, 19, 20]}

我希望输出如下:

A 和 C 中相同数字的个数:2

数 : 1, 2

B和D中相同数字的个数:1

15

并比较所有 4 个键和 return 唯一数字的数量。 这将是 17个唯一编号。

以下是我的代码:

keyAvalue = sdata.get('A')
    keyCvalue = sdata.get('C')
    keyBvalue= sdata.get('B')
    keyDvalue= sdata.get('D')
    countA= len(keyAvalue)
    countC= len(keyCvalue)
    compareAC = []
    compareBD= []
    for number in keyAvalue:
        if number in keyCvalue:
            if number not in compareAC:
                compareAC.append(number)
                countAC = len(compareAC)
    for number in keyBvalue:
        if number in keyDvalue:
            if number not in compareBD:
                compareBD.append(number)
                countBD = len(compareBD)
    for key, value in studentData.items():
        count = len([item for item in value if item]) #count number of values in key
        value.sort()
        formatValue = (" ".join(map(str,value)))
        formatAC = (" ".join(map(str,compareAC)))
        formatBD = (" ".join(map(str,compareBD)))   
 print (f'in both A and C = {countAC}\nnumber: {formatAC}\n')
    print (in both B and D = {countBD}\nnumber: {formatBD}\n')
    print (f'Number of unique number in A and C = {countA + countC - countAC}')

有更简单的方法吗?请帮助提前谢谢你。顺便说一句,我不应该使用设置数据类型来执行此操作。

可以使用 set.intersection() 找到两个列表之间的共同元素。

假设我们有 2 个列表:

list1 = [1, 2]
list2 = [1,3]

将list1转化为集合,以便我们对其进行求交运算

list1_as_set = set(list1)
intersection = list1_as_set.intersection(list2)

现在再次将这个路口转换成列表

intersection_as_list = list(intersection)

打印两个列表中公共元素的个数及其公共元素:

print("Number of common elements in list1 and list2: {}".format(len(intersection_as_list)))
print("common elements in list1 and list2: {}".format(intersection_as_list))

试试这个

from itertools import chain

def common_digits(l1, l2):
    return list(set(l1).intersection(l2))

def unique(l):
    return len(set(chain.from_iterable(l)))

sdata = {'A': [1, 2, 3, 4, 5, 6],'B': [11, 12, 3, 14, 15], 'C': [8, 9, 10, 1 ,2], 'D': [15, 3, 18, 19, 20]}

print(common_digits(sdata['A'], sdata['C']))

print(common_digits(sdata['B'], sdata['D']))

print(unique(sdata.values()))
sdata = {'A': [1, 2, 3, 4, 5, 6],'B': [11, 12, 3, 14, 15], 'C': [8, 9, 10, 1 ,2], 'D': [15, 3, 18, 19, 20]}

#going through the elements in sdata
for key in sdata.keys():
  #comparing every other list in sdata
  other_keys = [other for other in sdata.keys() if other != key]

  #checking the other list
  for other in other_keys:
    #the simliar count and value
    simliar = 0
    sim_vals = []
    #going through each value in the main list
    for value in sdata[key]:
      #checking if it is in the list
       if value in sdata[other]:
         simliar += 1
         sim_vals.append(value)

    print(other, key)
    #printing answer
    print(simliar)
    print(sim_vals)