【发布时间】:2020-05-15 23:09:08
【问题描述】:
我有一个嵌套字典,我试图有条件地搜索它以获取一些值。我正在遍历另一个文件并获取 val1、val2 和 val3。从那里我搜索字典以根据某些条件查找 ID。
但是,对于 5500 万行数据,这是非常昂贵的。我找不到任何更快的方法来做到这一点,我正在把它放在火花工作上。我试着让它,如果找到一个 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],
【问题讨论】:
-
倒带一点。这种结构是如何存在的?有什么可以改变的吗?
-
if val3[0]%2==0:取模来查找密钥表明出了点问题,至少对我而言 -
至少,如果
val3[0]%2 == 0是假的,你知道val3[0]%2 != 0是真的;您不必重新计算该值。 -
要优化您的搜索,您可以检查
if value in dictionary.items(),而不是在for循环中遍历字典中的所有值。这将节省您的时间 -
所以,在创建所有这些字典之前。我们也许可以将它推入 pandas/numpy,但我 95% 确定你在这里设置的任何结构都会阻碍你/我们。我们只是看不到输入或输出
标签: python dictionary optimization nested conditional-statements