我有两本字典,但为了简化起见,我就选这两本:
>>> x = dict(a=1, b=2)
>>> y = dict(a=2, b=2)
现在,我想比较x中的每个键值对在y中是否有相同的对应值,所以我这样写:
>>> for x_values, y_values in zip(x.iteritems(), y.iteritems()):
if x_values == y_values:
print 'Ok', x_values, y_values
else:
print 'Not', x_values, y_values
它的工作原理是返回一个元组,然后比较是否相等。
我的问题:
这对吗?还有更好的办法吗?最好不是在速度上,我说的是代码优雅。
更新:我忘了提到,我必须检查有多少键,值对是相等的。
参见字典视图对象:
https://docs.python.org/2/library/stdtypes.html#dict
这样你可以从dictView1中减去dictView2,它将返回一组在dictView2中不同的键/值对:
original = {'one':1,'two':2,'ACTION':'ADD'}
originalView=original.viewitems()
updatedDict = {'one':1,'two':2,'ACTION':'REPLACE'}
updatedDictView=updatedDict.viewitems()
delta=original | updatedDict
print delta
>>set([('ACTION', 'REPLACE')])
你可以交叉,并,差(如上所示),对称差这些字典视图对象。
更好吗?更快呢?-不确定,但它是标准库的一部分-这使得它在可移植性方面有很大的优势
你要做的就是x==y
你这样做不是一个好主意,因为字典里的条目不应该有任何顺序。你可能会比较[('a',1),('b',1)]和[('b',1), ('a',1)](相同的字典,不同的顺序)。
例如,看这个:
>>> x = dict(a=2, b=2,c=3, d=4)
>>> x
{'a': 2, 'c': 3, 'b': 2, 'd': 4}
>>> y = dict(b=2,c=3, d=4)
>>> y
{'c': 3, 'b': 2, 'd': 4}
>>> zip(x.iteritems(), y.iteritems())
[(('a', 2), ('c', 3)), (('c', 3), ('b', 2)), (('b', 2), ('d', 4))]
虽然只有一项不同,但你的算法会发现所有项都是不同的
dic1 == dic2
来自python文档:
下面的例子都返回一个字典等于
{" 1 ": 1, " 2 ": 2, " 3 ": 3}:
>>> a = dict(1 =1, 2 =2, 3 =3)
>>> b = {' 1 ': 1, ' 2 ': 2, ' 3 ': 3}
> > > c = dict (zip([“一”,“两个”,“三”],[1,2,3]))
> > > d = dict([(2, 2),('一',1),(‘三’,3)))
>>> e = dict({'三':3,'一':1,'二':2})
a == b == c == d == e
真正的
在第一个例子中提供关键字参数只适用于
是有效的Python标识符的键。否则,任何有效的密钥都可以
被使用。
适用于python2和python3。