Python检查值是否在字典列表中

11 投票
5 回答
28642 浏览
提问于 2025-04-16 17:52

我有一个字典的列表,比如说:

[{'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

这样做会比逐个查看原始列表快得多。

撰写回答