查找两个复杂词典之间的集合差异

Pra*_*bhu 2 python python-3.x

我有两个以下结构的字典:

a) dict1 = {'a':[ [1,2], [3,4] ], 'b':[ [1,2],[5,6] ]}
b) dict2 = {'a':[ [1,2], [5,6] ], 'b':[ [1,2],[7,8] ]}
Run Code Online (Sandbox Code Playgroud)

我需要找到字典中每个键之间的设置差异,即dict1 ['a'] - dict2 ['a']应该返回[3,4].任何想法都表示赞赏.

Ale*_*lli 6

使用可变项(例如列表)会使问题变得更加困难,因为它排除了Python set数据结构的简单使用.可能值得制作实际使用元组代替那些讨厌的列表的临时副本/版本:

def tempaux(d):
  return dict((k, set(tuple(x) for x in v))
              for k, v in d.iteritems())
Run Code Online (Sandbox Code Playgroud)

现在:

def thedifs(dd1, dd2)
  d1 = tempaux(dd1)
  d2 = tempaux(dd2)
  allkeys = set(d1).update(d2)
  empty = set()
  difs = []
  for k in allkeys:
    s1 = d1.get(k, empty)
    s2 = d2.get(k, empty)
    adif = s1 - s2
    if adif: difs.append(adif)
  return difs
Run Code Online (Sandbox Code Playgroud)

这假定实际设置差异而不是对称差异等.当然,您可以在返回之前将元组转回列表,&c,具体取决于您的确切要求.