基于不同值的组字典

时间:2014-03-10 13:33:42

标签: python

根据相似的值对字典进行分组很容易,但我很难想出一种反面的好方法:将字典中的一个与其他字符值不同的字典分组。

例如,请参考:

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

我很难想出一种实现这种功能的好方法。你有什么关于如何前进的建议吗?

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选择附加内容。