在词典列表中查找索引

时间:2014-07-25 19:33:03

标签: python list indexing

如果我知道密钥名称,当数据结构如何时,如何找到列表索引?

foo = [{'key1': 'value1'}, {'key2': 'value2'}, {'key3': 'value3'}]

例如,给定字符串'key2',它在上面列表中的索引是什么?

我目前的代码:

for i in xrange(len(foo)):
    if foo[i].keys()[0] == 'key1':
        print i

但我很好奇是否有一些不需要显式循环的光滑技术。

1 个答案:

答案 0 :(得分:6)

您可以使用nextenumerategenerator expression

>>> foo = [{'key1': 'value1'}, {'key2': 'value2'}, {'key3': 'value3'}]
>>> next((i for i,d in enumerate(foo) if 'key1' in d), None)
0
>>> next((i for i,d in enumerate(foo) if 'key2' in d), None)
1
>>> next((i for i,d in enumerate(foo) if 'key3' in d), None)
2
>>> next((i for i,d in enumerate(foo) if 'key4' in d), None)
>>>

请注意,您也可以使用任何默认值替换None

>>> next((i for i,d in enumerate(foo) if 'key4' in d), 'not found')
'not found'
>>>

另外,我想提一下:

if foo[i].keys()[0] == 'key1':
如果词典有多个项目,

将无法始终有效。这是因为字典的密钥自然是无序的:

>>> d = {'abc':1, 'xyz':2}
>>> d.keys()
['xyz', 'abc']
>>>

此外,您无需调用字典的keys方法来搜索其键,因为您拥有in operator

>>> 'abc' in d
True
>>> 'def' in d
False
>>>

此解决方案也更有效,因为它避免了创建不必要的列表。