gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:58:16 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com