bho*_*ben 4 python indexing list
如果我知道密钥名称,那么当数据结构如此时,如何找到列表索引?
foo = [{'key1': 'value1'}, {'key2': 'value2'}, {'key3': 'value3'}]
Run Code Online (Sandbox Code Playgroud)
例如,给定字符串'key2',上面列表中的索引是什么?
我目前的代码:
for i in xrange(len(foo)):
if foo[i].keys()[0] == 'key1':
print i
Run Code Online (Sandbox Code Playgroud)
然而,我很好奇是否有一些不需要显式循环的光滑技术.
>>> 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)
>>>
Run Code Online (Sandbox Code Playgroud)
请注意,您也可以None使用任何默认值替换:
>>> next((i for i,d in enumerate(foo) if 'key4' in d), 'not found')
'not found'
>>>
Run Code Online (Sandbox Code Playgroud)
另外,我想提一下:
if foo[i].keys()[0] == 'key1':
Run Code Online (Sandbox Code Playgroud)
如果词典有多个项目,则不会始终有效.这是因为字典的键自然是无序的:
>>> d = {'abc':1, 'xyz':2}
>>> d.keys()
['xyz', 'abc']
>>>
Run Code Online (Sandbox Code Playgroud)
此外,没有必要调用keys字典的方法来搜索其键,因为你有in运算符:
>>> 'abc' in d
True
>>> 'def' in d
False
>>>
Run Code Online (Sandbox Code Playgroud)
此解决方案也更有效,因为它避免了创建不必要的列表.
| 归档时间: |
|
| 查看次数: |
932 次 |
| 最近记录: |