ran*_*ght 43 python dictionary
我目前正在使用以下函数来比较字典值.有更快或更好的方法吗?
match = True
for keys in dict1:
if dict1[keys] != dict2[keys]:
match = False
print keys
print dict1[keys],
print '->' ,
print dict2[keys]
Run Code Online (Sandbox Code Playgroud)
编辑:两个词都包含相同的键.
Tho*_*asH 151
如果问题的真正意图是dicts之间的比较(而不是打印差异),答案是
dict1 == dict2
Run Code Online (Sandbox Code Playgroud)
之前已经提到过,但我觉得它在其他信息中略显淹没.它可能看起来很肤浅,但dicts的价值比较实际上具有强大的语义.它涵盖
最后一点再次显得微不足道,但实际上很有意思,因为它意味着所有这些都递归地应用于嵌套的dicts.例如
m1 = {'f':True}
m2 = {'f':True}
m3 = {'a':1, 2:2, 3:m1}
m4 = {'a':1, 2:2, 3:m2}
m3 == m4 # True
Run Code Online (Sandbox Code Playgroud)
对于列表的比较存在类似的语义.所有这些使得例如比较深Json结构,单独使用简单的"=="是一个明智的选择.
Ale*_*lli 40
如果dicts具有相同的键组,并且您需要所有这些打印以获得任何值差异,那么您无能为力; 也许是这样的:
diffkeys = [k for k in dict1 if dict1[k] != dict2[k]]
for k in diffkeys:
print k, ':', dict1[k], '->', dict2[k]
Run Code Online (Sandbox Code Playgroud)
几乎与你所拥有的相同,但你可以通过在循环之前对diffkeys进行排序来获得更好的表示.
Joh*_*ooy 10
你也可以使用套装
>>> a = {'x': 1, 'y': 2}
>>> b = {'y': 2, 'x': 1}
>>> set(a.iteritems())-set(b.iteritems())
set([])
>>> a['y']=3
>>> set(a.iteritems())-set(b.iteritems())
set([('y', 3)])
>>> set(b.iteritems())-set(a.iteritems())
set([('y', 2)])
>>> set(b.iteritems())^set(a.iteritems())
set([('y', 3), ('y', 2)])
Run Code Online (Sandbox Code Playgroud)
嗯,你在描述dict1 == dict2
(检查两者是否相等)
但是你的代码所做的是all( dict1[k]==dict2[k] for k in dict1 )
(检查dict1中的所有条目是否与dict2中的条目相同)