Python 根据不同的值对字典进行分组
根据相似的值对字典进行分组很容易,但我很难想出一种相反的好方法:对其中一个键的值与其他键的值不同的字典进行分组 例如,以这些为例:Python 根据不同的值对字典进行分组,python,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 我
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
我很难想出一个实现这种功能的好方法。关于如何继续,您有什么建议吗?假设键和值是可散列的,您可以通过对项目使用集合来获得字典差异。然后,您可以获得一个目录对列表,以及它们的区别:
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)))
如果只需要单个项目,请在len(key)==1时使用
选通追加 那么,预期的产出是多少?那么{a,c}@sjcipher呢?我把我期望输出的东西说得更清楚了。为什么你的输出不是{3:{a,c},1:{a,c}}
?@doukremt:这些键所列出的dict值与变量名的字符不同,而这些键的值让我很困惑……哇,这太棒了itertools
每次我看到它时,它似乎越来越有趣:)