我试图通过比较键来比较两个词典,如果两个单独的词典中的两个键是相同的,程序应检查值是否也相同,如果它们不相同,程序应该识别
这是我写的代码:
def compare(firstdict,seconddict):
shared_items = set(firstdict()) & set(seconddict())
length = len(shared_items)
if length > 0:
return shared_items
if length < 1:
return None
print(compare(firstdict,seconddict))
('firstdict'和'seconddict'是以前函数中的两个词典。)
当代码运行时,即使它们的值不同,它也会输出所有没有值的相同键。
例如:if:
firstdict = {'cat' : 'animal', 'blue' : 'colour', 'sun' : 'star'}
seconddict = {'cat' : 'pet', 'blue' : 'colour', 'earth' : 'star'}
它会打印出来:
'cat', 'blue'
虽然我想把它打印出来:
'cat pet (animal)'
以确切的格式。
有关如何编辑我的代码以执行此操作的任何建议,请注意:)
答案 0 :(得分:4)
您可以在词典keys()
上使用set intersection。然后遍历这些并检查与这些键对应的值是否相同。如果没有,您可以使用format
打印出来。
def compare(first, second):
sharedKeys = set(first.keys()).intersection(second.keys())
for key in sharedKeys:
if first[key] != second[key]:
print('Key: {}, Value 1: {}, Value 2: {}'.format(key, first[key], second[key]))
>>> compare(firstdict, seconddict)
Key: cat, Value 1: animal, Value 2: pet
另一个例子
>>> firstdict = {'cat' : 'animal', 'blue' : 'colour', 'sun' : 'star', 'name': 'bob', 'shape': 'circle'}
>>> seconddict = {'cat' : 'pet', 'blue' : 'colour', 'earth' : 'star', 'name': 'steve', 'shape': 'square'}
>>> compare(firstdict, seconddict)
Key: shape, Value 1: circle, Value 2: square
Key: cat, Value 1: animal, Value 2: pet
Key: name, Value 1: bob, Value 2: steve
答案 1 :(得分:0)
如果您的值也是可以使用的,那么您可以使用项来获得公共键/值配对:
firstdict = {'cat' : 'animal', 'blue' : 'colour', 'sun' : 'star'}
seconddict = {'cat' : 'pet', 'blue' : 'colour', 'earth' : 'star'}
common = set(firstdict.iteritems()).intersection(seconddict.iteritems())
for k,v in common:
print("Key: {}, Value: {}".format(k,v))
Key: blue, Value: colour
要检查两个dicts是否相同,请检查每个dic:
print(len(common)) == len(firstdict)
查找具有不同值的公用密钥:
for k,v in firstdict.iteritems():
if k in seconddict and seconddict[k] != v:
print("Key: {}, Value: {}".format(k, seconddict[k]))
Key: cat, Value: pet
答案 2 :(得分:0)
在示例代码中使用集合使其效率低于简单地循环遍历键,这也可能更具可读性:
firstdict = {'cat' : 'animal', 'blue' : 'colour', 'sun' : 'star'}
seconddict = {'cat' : 'pet', 'blue' : 'colour', 'earth' : 'star'}
def compare(firstdict, seconddict):
for key in firstdict:
if key in seconddict:
first, second = firstdict[key], seconddict[key]
if first != second:
print('%s %s (%s)' % (key, first, second))
compare(firstdict, seconddict)
输出:
cat animal (pet)
答案 3 :(得分:0)
Padraic的方法似乎比这个好,但它是另一种选择。所以这不是最好的方法,但它可以完成工作。
逐步浏览每个元素并手动比较它们。
def compare(dictOne,dictTwo):
for keyOne in dictOne:
for keyTwo in dictTwo:
if keyTwo == keyOne:
if dictOne[keyOne] != dictTwo[keyTwo]:
print(keyOne+" "+dictOne[keyOne]+" ("+dictTwo[keyTwo]+")")
compare(firstdict,seconddict)
你的问题说打算输出,并没有提到你希望它们在数组中返回,所以上面的代码将逐步通过两个dicts逐个比较它们并以不匹配的格式打印出来。