Python检查值是否在字典列表中
我有一个字典的列表,比如说:
[{'name':'Bernard','age':7},{'name':'George','age':4},{'name':'Reginald','age':6}]
我想检查一个字符串值是否和列表中任何字典里的'name'值相同。比如说,如果是'Harold',那结果是False,但如果是'George',那结果就是True。
我知道我可以通过逐个检查列表里的每个项目来做到这一点,但我在想有没有更有效的方法呢?
5 个回答
1
我觉得用列表推导式也能解决这个问题。
names = [i['name'] for i in l]
然后可以这样使用:
'Bernard' in names (True)
'Farkle' in names (False)
或者用一行代码(如果只需要检查一次的话)
'Bernard' in [i['name'] for i in l] (True)
15
正确的解决方案
其实有一种比循环更有效的方法来完成这个任务。如果你使用 operators.itemgetter
,你就可以简单地用 if x in y
来检查了。
#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
17
不,如果你只有这份字典列表,就没有更有效的方法了。
不过,如果你想经常检查,可以提取一个包含名字和年龄的字典:
l = [{'name':'Bernard','age':7},{'name':'George','age':4},{'name':'Reginald','age':6}]
d = dict((i['name'], i['age']) for i in l)
现在你有了 d
:
{'Bernard': 7, 'George': 4, 'Reginald': 6}
接下来你可以检查:
'Harold' in d -> False
'George' in d -> True
这样做会比逐个查看原始列表快得多。