<p>获取满足条件的<em>第一个</em>索引的最简单方法(在Python2.6或更高版本中:</p>
<pre><code>next((i for i, d in enumerate(hugelist) if 735 in d['ids']), None)
</code></pre>
<p>如果没有项满足条件,则这将给出<code>None</code>;更一般的情况下,您可以将第二个参数作为<code>next</code>内置参数的第二个参数,或者忽略第二个参数(在这种情况下,您可以删除一组括号),前提是没有项满足条件时会出现StopIteration异常(例如。,你知道这种情况是不可能的)。在</p>
<p>如果在对<code>hugelist</code>或其内容的更改之间需要执行这种操作的次数非常少,那么,正如您在问题的第二次编辑中所指出的那样,最好构建一个辅助dict(从整数到包含它的第一个dict的索引)。因为您需要第一个适用的索引,所以需要向后迭代(因此,接近<code>hugelist</code>开头的命中将覆盖更进一步的命中)--例如:</p>
^{pr2}$
<p>[[不能使用<code>reversed(enumerate(...</code>,因为<code>enumerate</code>返回的是迭代器,而不是列表,<code>reversed</code>被优化为只处理一个序列参数——这就需要<code>L-i</code>]]。在</p>
<p>您可以用其他方式生成<code>auxdict</code>,包括不进行反转,例如:</p>
<pre><code>auxdict = {}
for i, d in enumerate(hugelist):
for item in d['ids']:
if item not in auxdict: auxdict[item] =i
</code></pre>
<p>但是,由于在内部循环中执行的<code>if</code>数量巨大,这可能会慢得多。由于内部循环的需要,直接<code>dict</code>构造函数(采用一系列键、值对)也可能较慢:</p>
<pre><code>L = len(hugelist) - 1
auxdict = dict((item, L-i) for i, d in enumerate(reversed(hugelist)) for item in d['ids'])
</code></pre>
<p>然而,这些只是定性的考虑——考虑在<code>hugelist</code>中的一些“典型/代表性”值示例上运行基准测试(在命令行提示符下使用<code>timeit</code>),以测量这些方法的相对速度(以及,它们的运行时与独立查找的运行时的比较,如我在这个答案开头所示——这个比率,加上在连续的<code>hugelist</code>更改之间执行的平均查找次数,将有助于您选择总体策略)。在</p>