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

标签 python json data-structures

我有一个巨大的 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)

我不认为标准字典支持重复,不太确定使用哪种数据结构来支持重复的键、值对

最佳答案

嗯,这是一个最好的猜测。它使用 dict 而不是 json 对象,因此您需要仔细检查比较是否适用于您的情况。这使用生成器来生成(对象,计数)的元组。如果 B 中有 0 个 obj 实例,则插入 False。然后,它检查是否存在 False,以满足:

see if every element in A is within B

我不知道这是否是最快的方法,但这是我突然想到的。 A 和 B 是字典列表,在本例中,只是用于测试的 {'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

关于python - 使用 python 在大型 JSON 数据集中查找值和重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26870612/

相关文章:

Python Selenium : select option

python - 将 datetime 转换为 timedelta 以便添加它们

javascript - 如何根据key上的过滤器获取json路径?

javascript - 使用 Nodejs 读取存储在 aws S3 中的 JSON 文件

algorithm - 大 O 代表最坏情况运行时间,Ω 代表最好情况,但为什么有时 Ω 用于最坏情况?

java - 如何以最有效的方式获得以下输出?

python - 验证安装,如果已安装则打印版本,否则安装该包

python - 使用 scipy.signal 查找局部最大值

javascript - 有条件更新 d3.js 力图中节点的最佳方法

algorithm - 在一组集合中查找子集和超集的有效方法