我有一个dicts列表,例如
[{'name':'Bernard','age':7},{'name':'George','age':4},{'name':'Reginald','age':6}]
Run Code Online (Sandbox Code Playgroud)
我想检查一下字符串值是否与列表中任何一个dicts中的'name'值相同.例如'Harold'将是False,但'George'将是True.
我意识到我可以通过循环遍历列表中的每个项目来做到这一点,但我想知道是否有更有效的方法?
eum*_*iro 14
不,如果您只有这个dicts列表,就不会有更有效的方法.
但是,如果要经常检查,可以提取名称为:age items的字典:
l = [{'name':'Bernard','age':7},{'name':'George','age':4},{'name':'Reginald','age':6}]
d = dict((i['name'], i['age']) for i in l)
Run Code Online (Sandbox Code Playgroud)
现在你有d:
{'Bernard': 7, 'George': 4, 'Reginald': 6}
Run Code Online (Sandbox Code Playgroud)
现在你可以检查:
'Harold' in d -> False
'George' in d -> True
Run Code Online (Sandbox Code Playgroud)
它比迭代原始列表要快得多.
与循环相比,有一种更有效的方法.如果你使用operators.itemgetter你可以做一个简单的if x in y check
#to simply check if the list of dicts contains the key=>value pair
'George' in map(itemgetter('name'), list_of_dicts)
#if you want to get the index
index = map(itemgetter('name'), list_of_dicts).index("George") if 'George' in map(itemgetter('name'), list_of_dicts) else None
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13531 次 |
| 最近记录: |