Python 快速访问字典中的部分数据
例如,如果我在一本字典中有数百万条记录Python 快速访问字典中的部分数据,python,algorithm,Python,Algorithm,例如,如果我在一本字典中有数百万条记录 {(1,2):3,(2,3):4,(3:2):5…x百万} 这是一个元组作为键,并具有相应的值 我想做的是获取tuple[1]的值=2的数据 我的方法之一是 for item, value in dict.iteritems(): if item[1] == 2: Do operations here... 这是一种缓慢的方法,有没有更好的算法来加快速度? 喜欢因此,我不必浏览数以百万计的条目如果你只有{(a,b):c
{(1,2):3,(2,3):4,(3:2):5…x百万}
这是一个元组作为键,并具有相应的值
我想做的是获取tuple[1]的值=2的数据
我的方法之一是
for item, value in dict.iteritems():
if item[1] == 2:
Do operations here...
这是一种缓慢的方法,有没有更好的算法来加快速度?
喜欢因此,我不必浏览数以百万计的条目如果你只有{(a,b):c}
字典,那么不,你不能做得更好:因为你不知道哪些键有b=2
,你必须查看所有键
如果您自己构建字典,那么您可以在该阶段使用
b=2
分离元组,这样您就不必再次搜索它们。您可以将它们存储在一个单独的字典中(仅存储项{(a,2):c}
),或者重写您拥有的字典的结构(例如{b:{(a,b):c}
)。在元组作为键的字典中,您必须遍历所有键才能找到
带有
键[1]==2
的。除了解决这个问题,没有其他选择。您是否有任何灵活性来更改dict结构?将其存储为{1:{2:3},2:{3:4}等将使这种访问更容易。否则,如果需要频繁查找,您还可以维护另一个哈希表以加快查找速度。@DanielRoseman您确定这就是您所指的结构吗?OP想要项目[1]==2
而不是项目[0]==2
。或者从{(a,b):c}
到{b:{(a,b):c}
。这将使您选择(项、项的值、D.iteritems()中的值,如果项[1]==2)
只需要D[2].iteritems()
。或者有另一个附加的哈希表,如{1:(2,…)、2:(3,…)。}。这只会占用所需的内存,并且可以快速查找。