根据相似的值对字典进行分组很容易,但我很难想出一种反面的好方法:将字典中的一个与其他字符值不同的字典分组。
例如,请参考:
a = {1: 'a', 2: 'b', 3:'c'}
b = {1: 'a', 2: 'b', 3:'d'}
c = {1: 'c', 2: 'b', 3:'d'}
这些可以分为两组,其中一个键值不同:
# Expected output:
{3: {a, b}, # Differs on 3
1: {b, c}} # Differs on 1
我很难想出一种实现这种功能的好方法。你有什么关于如何前进的建议吗?
答案 0 :(得分:3)
您可以通过在项目上使用集合来获取字典差异,假设键和值是可清除的。然后,您可以获得一对dicts的列表,以及它们之间的区别:
a = {1: 'a', 2: 'b', 3:'c'}
b = {1: 'a', 2: 'b', 3:'d'}
c = {1: 'c', 2: 'b', 3:'d'}
def diff_dict(dicta, dictb):
aset = set(dicta.items())
bset = set(dictb.items())
diff = aset ^ bset
return tuple(set(x[0] for x in diff))
print diff_dict(a, b)
(3,)
all_dicts = [a,b,c]
listgroup = []
for dicta, dictb in itertools.combinations(all_dicts, 2):
key = diff_dict(dicta, dictb)
listgroup.append((key, (dicta, dictb)))
如果您只想要单个项目,请使用if len(key) == 1
选择附加内容。