使用python在大型JSON数据集中查找值和重复项

使用python在大型JSON数据集中查找值和重复项,python,json,data-structures,Python,Json,Data Structures,我有一个巨大的JSON对象数据集(B)。我还有另一个更小的JSON对象数据集(A)。查看A中的每个元素是否都在B中的最快方法是什么?另外,我如何检查A中的元素是否与B中的元素重复 我想到的是创建一个数据集B的字典,其键值对是相同的JSON值。这将允许快速查找。我也会对集合A做同样的事情,但是集合A中每个键的值都是一个空列表 集合A中的每个键都将在集合B上查找并附加到相应的列表中。完成此操作后,列表的长度将确定是否未找到、匹配或复制这些值 如果集合a中某个键的列表长度为 0 --> non

我有一个巨大的JSON对象数据集(B)。我还有另一个更小的JSON对象数据集(A)。查看A中的每个元素是否都在B中的最快方法是什么?另外,我如何检查A中的元素是否与B中的元素重复

我想到的是创建一个数据集B的
字典
,其键值对是相同的JSON值。这将允许快速查找。我也会对集合A做同样的事情,但是集合A中每个键的值都是一个空列表

集合A中的每个键都将在集合B上查找并附加到相应的列表中。完成此操作后,列表的长度将确定是否未找到、匹配或复制这些值

如果集合a中某个键的列表长度为

0  --> none found in B
1  --> 1 found in B
>1 --> more than one found in B (duplicates found)

我认为标准字典不支持重复,也不确定使用哪种数据结构来支持重复的键、值对。它使用dicts而不是json对象,因此您需要仔细检查比较在您的案例中是否有效。它使用生成器生成(对象、计数)的元组。如果B中有0个
obj
实例,则插入False。然后,检查是否存在False,以满足:

看看A中的每个元素是否都在B中

我不知道这是不是最快的方法,但这是我脑子里想出来的。A和B是dict的列表,在本例中,只是测试用的
{'A':'A'}
对。玩最后的切片,看看它是否符合你的要求

列表A包含每个其他字母,列表B包含来自D-Z的字母

import string

a = [{x:x} for x in list(string.ascii_lowercase)[0:26:2]] # Every other letter                                                                               
b = [{x:x} for x in list(string.ascii_lowercase)[3:26]]

def compare(a, b):
    for obj in a:
        c = b.count(obj)
        if c == 0:
            yield False # Every element in A is not in B                                                                                                     
        yield (obj, c)


findings = [res for res in compare(a,b)]
print findings

if False in findings:
    print "Every element of A is not in B"
else:
    for res in findings:
        obj, num = res
        print "Object %s was found %d times" % (str(obj), num)
如果不需要计数,可以将比较功能更改为:

def compare2(a, b):
    for obj in a:
        if b.count(obj) == 0:
            return False
    return True

您是否考虑过使用集合的求交和差分方法?像集合(B)一样,交叉点(A),其中A和B是你的字典。对于重复项,我认为您应该在根据JSON数据创建字典时处理它们。@user2757226谢谢您提出这个问题!我不能设置(B),因为我需要证明一个dict存在重复显示,key是json值,value是[a_count,B_count]的列表?根据json数据是什么,您可能需要一种方法来规范化数据。列表和目录不能是键。例如,您可以将dict转换为(键、值)元组的排序元组。@tdelaney我不太确定您想说什么对不起=/@liondacer。你的问题严重不够具体。如何确定哪些对象是重复的?如何进行对象的比较?你打算用什么作为字典的索引?您是否可以控制JSON文件和/或其包含的对象的创建?