Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 快速访问字典中的部分数据_Python_Algorithm - Fatal编程技术网

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,…)。}。这只会占用所需的内存,并且可以快速查找。