有条件地搜索嵌套字典Python的更快方法



我有一个嵌套字典,我试图有条件地搜索它以获取一些值。我正在遍历另一个文件并抓取 val1、val2 和 val3。从那里,我搜索字典以根据某些条件找到ID。

但是,对于 55M 行数据,这是非常昂贵的。我找不到任何更快的方法来做到这一点,我正在把它放在一个火花工作中。我试图拥有它,以便如果找到 ID,我们停止搜索字典,但我不确定我是否正确执行此操作。

看来我遍历字典中的每个键来查找值,不确定如何优化它。任何帮助,不胜感激。这是代码:

for key, val in dict[val1].items():
if key[0]==val2 or key[1] == val2:
if len(val3)==1:
if val3[0]%2==0:
for key2, val2 in val.items():
if key2[2]<=val3[0] and key2[3]>=val3[0]:
ID = val2[0]
if val3[0]%2!=0:
for key2, val2 in val.items():
if key2[0]<=val3[0] and key2[1]>=val3[0]:
ID = val2[0]
if ID!=None:
break

编辑: 输入值如下所示

val1 = zone#
val2 = 'name'
val3 = score in tuple form like (2,)

嵌套字典看起来像这样:

{3: defaultdict(<function __main__.<lambda>.<locals>.<lambda>()>,
{('jeff', 'jeff A'): defaultdict(list,
{(23,
41,
28,
40,): [61814],

@Gal发布了答案,但这是现在的设置。运行速度比 for 循环迭代快 10 倍以上。

if val2 in dict[val1]:
if len(val3)==1:
if val3[0]%2==0:
for key2, val5 in dict[val1][val2].items():
if key2[2]<=val3[0] and key2[3]>=val3[0]:
ID = val5[0]

为了满足 val2 有两个可能结果的条件,我们创建了两个字典并运行此检查两次,现在它的速度要快得多。

最新更新