如何获得JSON文件中两个元素之间的差异

2024-05-29 05:43:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个结构相同的JSON文件:

a_communities = {"communities": [{"group": "D06@domain.com", "members": ["member1", "member2"]}, {"group": "D07@domain.com", "members": ["member3"]}]}
b_communities = {"communities": [{"group": "D06@domain.com", "members": ["member1", "member2", "members3"]}, {"group": "D07@domain.com", "members": ["member4"]}]}

我想得到两个文件中同一组的区别:得到两个文件中属于/不属于同一组的成员

我试着让他们用这个函数:

def get_g_members_from_value(group, value):
    for g_community in g_communities['communities']:
        if g_community['group'] == str(group): #the same group then:
            print "***"+str(reduce(lambda v1,v2: v1 or v2, list(set(g_community['members']).difference(value))))
            if [i for i, j in zip(g_community['members'] , value) if i != j] != []:
                print "members are not equal for group :"+str(group)
                print "-- g members :"+str(g_community['members'])
                print "-- c members :"+str(value)
                print "-- diff :"+ str([i for i, j in zip(g_community['members'] , value) if i != j])

for c_community in c_communities['communities']:
    get_g_members_from_value(c_community['group'], c_community['members'])

我已经打印了更多的结果,以查看差异,但它不能让我的差异,我的代码有什么问题


Tags: 文件incommunitycomforifvaluedomain
1条回答
网友
1楼 · 发布于 2024-05-29 05:43:17

要将注释扩展为代码,我首先将当前的结构转换为每个社区的{'group_name': set(group_members)}形式的字典:

>>> a_members = {d['group']: set(d['members']) for d in a_communities['communities']}
>>> b_members = {d['group']: set(d['members']) for d in b_communities['communities']}
>>> a_members
{'D06@domain.com': set(['member1', 'member2']), 'D07@domain.com': set(['member3'])}
>>> b_members
{'D06@domain.com': set(['members3', 'member1', 'member2']), 'D07@domain.com': set(['member4'])}

然后使用^{}

>>> for key in a_members:
    print key, a_members[key].symmetric_difference(b_members[key])


D06@domain.com set(['members3'])
D07@domain.com set(['member4', 'member3'])

^{}

>>> for key in a_members:
    print key, a_members[key].intersection(b_members[key])


D06@domain.com set(['member1', 'member2'])
D07@domain.com set([])

了解两个社区成员的异同。所有这些都假设:

  1. 每个group都有一个唯一的名称;以及
  2. members列表包含可哈希对象

相关问题 更多 >

    热门问题