繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM