如果我知道键名,那么当数据结构如下时,如何找到列表索引?
foo = [{'key1': 'value1'}, {'key2': 'value2'}, {'key3': 'value3'}]
例如,给定字符串'key2'
,上面列表中的索引是什么?
我当前的代码:
for i in xrange(len(foo)):
if foo[i].keys()[0] == 'key1':
print i
但是,我很好奇是否有一些不需要显式循环的技巧。
>>> 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
运算符,因此无需调用字典的方法来搜索其键:
>>> 'abc' in d
True
>>> 'def' in d
False
>>>
该解决方案也更加有效,因为它避免了创建不必要的列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句