如何解决字典在不同的键中找到相似的值
请帮助,我有一本这样的字典:
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个键并返回唯一数字。 那将是 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数据类型来做到这一点。
解决方法
可以使用set.intersection()找到两个列表之间的公共元素。
假设我们有2个列表:
list1 = [1,2]
list2 = [1,3]
将list1转换为set,以便我们可以对其执行相交操作。
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,14,15],'C': [8,9,10,1,2],'D': [15,18,19,20]}
print(common_digits(sdata['A'],sdata['C']))
print(common_digits(sdata['B'],sdata['D']))
print(unique(sdata.values()))
,
sdata = {'A': [1,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)
,
prob= {'A':[1,'B':[11,'D':[15,20]}
A和C中唯一编号的数量
a_and_c=set(prob['A']).union(prob['C'])
print("Number of unique number in A and C :",len(a_and_c),a_and_c)
B和D中唯一编号的数量
b_and_d=set(prob['B']).union(prob['D'])
print("Number of unique number in B and D :",len(b_and_d),b_and_d)
dic中唯一数字的数量
print("Number of unique number in dic: ",len(a_and_c.union(b_and_d)))
概念:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。