字典在不同的键中找到相似的值
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)
请帮忙,我有一本这样的字典:
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)