[英]Faster method to conditionally search nested dictionary Python
我有一个嵌套字典,我试图有条件地搜索它以获取一些值。 我正在遍历另一个文件并获取 val1、val2 和 val3。 从那里我搜索字典以根据某些条件查找 ID。
但是,对于 5500 万行数据,这是非常昂贵的。 我找不到任何更快的方法来做到这一点,我正在把它放在火花工作上。 我试图拥有它,以便如果找到一个 ID,我们会停止搜索字典,但我不确定我是否正确执行此操作。
看来我 go 通过字典中的每个键来查找值,不知道如何优化它。 任何帮助表示赞赏。 这是代码:
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 具有两种可能结果的条件,我们创建了两个 dict 并运行此检查两次,现在速度快得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.