Python 按键值查找列表中词典的索引

Python 按键值查找列表中词典的索引,python,python-2.7,Python,Python 2.7,如何在我的数据集a中找到'node4'的索引?我希望node4成为这个特定函数的输入 例: 使用和: 我会建立一个索引字典: >>> index = {key: i for i, elem in enumerate(a) for key in elem} >>> index['node4'] 3 这需要对整个列表进行一次检查以构建字典(这对于一次性使用来说是最糟糕的情况),但如果您多次需要它,则速度会更快。或者类似于: [index for inde

如何在我的数据集a中找到
'node4'
的索引?我希望
node4
成为这个特定函数的输入

例:

使用和:


我会建立一个索引字典:

>>> index = {key: i for i, elem in enumerate(a) for key in elem}
>>> index['node4']
3
这需要对整个列表进行一次检查以构建字典(这对于一次性使用来说是最糟糕的情况),但如果您多次需要它,则速度会更快。

或者类似于:

    [index for index, record in enumerate(a) if 'node4' in record.keys()][0]

这是偶然的网络流算法的结果吗?@JonathonReinhart它实际上是为什么这是一个单键词典的大列表?一本大词典可能会更好,但不管是什么程序,很难想出一个理由让你为它建立一个单键词典。@Liondator你在使用哪个库,NetworkX?@JonathonReinhart不,我不是
,如果item
中的inKey会更快。@Ashwinichaudhar哦,为什么?它不必显式地获取键列表?@thefourtheye
inkey in item
字典键查找是O(1),而构建列表/视图和查找
inkey in item.keys()
是O(N)@alko您确定
inkey in item
是O(1)吗?一个典型的哈希表实现将计算哈希O(1),检查是否填充了该bucket O(1),然后迭代该bucket O(m)中的所有项,以查看正在搜索的项是否存在。(m是基于哈希冲突率和桶大小的某个因素)。“嗯,我可能只是在迂腐。”乔纳森·莱因哈特是的,我有点过于简单化了,更多细节在
def findIndex(inKey):
    for idx, item in enumerate(a):
        if inKey in item:
            return idx
    return None
>>> index = {key: i for i, elem in enumerate(a) for key in elem}
>>> index['node4']
3
    [index for index, record in enumerate(a) if 'node4' in record.keys()][0]