目录
Check if a value exists in a List of Dictionaries in Python
- 检查一个值是否存在于 Python 的字典列表中
- 检查字典列表中是否不存在某个值
- 获取给定键的所有值的列表
- 使用 for 循环检查字典列表中是否存在值
- 获取列表中匹配字典的索引
- 使用过滤器检查字典列表中是否存在值
- 使用地图检查字典列表中是否存在值
检查一个值是否存在于 Python 的字典列表中
检查一个值是否存在于字典列表中:
- 使用生成器表达式迭代列表。
- 访问每个字典中的给定键并将其与值进行比较。
- 将结果传递给
any()
函数。
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] if any( dictionary.get('name') == 'bobby' for dictionary in list_of_dicts ): # 👇️ this runs print('A dictionary with the specified value exists')
第一个示例检查一个值是否存在于字典列表中。
第二个检查字典列表中是否不存在值。
我们使用生成器表达式来遍历列表。
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] if any( dictionary['name'] == 'bobby' for dictionary in list_of_dicts ): # 👇️ this runs print('A dictionary with the specified value exists')
在每次迭代中,我们访问name
键并将其值与特定字符串进行比较。
any函数接受一个可迭代对象作为参数,如果可迭代对象中的任何元素为真则返回。True
any()
函数短路并返回True
。检查一个值是否不存在于字典列表中
如果您需要检查某个值是否不存在于字典列表中,请否定对any()
.
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] if not any(dictionary.get('name') == 'bobby' for dictionary in list_of_dicts): print('None of the dictionaries contain the specified value')
运算not
符翻转结果,因此if
仅当该值不存在于列表中的任何字典中时才运行该块。
dict.get()
方法来避免出现异常。 KeyError
如果键在字典中,则 dict.get 方法返回给定键的值,否则返回默认值。
该方法采用以下 2 个参数:
姓名 | 描述 |
---|---|
钥匙 | 返回值的键 |
默认 | 如果字典中不存在提供的键,则返回默认值(可选) |
default
如果未提供参数值,则默认为None
,因此该get()
方法永远不会引发. KeyError
获取给定键的所有值的列表
如果您需要获取给定键的所有值的列表,请使用列表理解。
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] name_values = [ dictionary['name'] for dictionary in list_of_dicts ] print(name_values) # 👉️ ['alice', 'bobby', 'carl'] print('bobby' in name_values) # 👉️ True print('another' in name_values) # 👉️ False
我们使用
列表理解来遍历列表。
在每次迭代中,我们访问当前字典中的特定键并返回相应的值。
或者,您可以使用for 循环。
for
使用循环检查一个值是否存在于字典列表中
这是一个三步过程:
- 使用
for
循环遍历列表。 - 访问每个字典中的给定键并将其与值进行比较。
- 如果找到匹配的字典,则退出
for
循环。
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] value_exists = False for dictionary in list_of_dicts: if dictionary.get('name') == 'bobby': value_exists = True # 👇️ {'id': 2, 'name': 'bobby', 'salary': 101} print(dictionary) break
我们使用for
循环遍历列表。
在每次迭代中,我们检查当前字典是否具有name
具有特定值的键。
如果满足条件,我们将value_exists
变量设置为True
并退出for
循环。
break语句跳出最内层的封闭或for
循环while
。
获取匹配字典在列表中的索引
如果需要获取列表中匹配字典的索引,请使用该
enumerate()
函数。
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] value_exists = False for index, dictionary in enumerate(list_of_dicts): if dictionary.get('name') == 'bobby': value_exists = True # 👇️ {'id': 2, 'name': 'bobby', 'salary': 101} print(dictionary) print(index) # 👉️ 1 break
我们使用该enumerate()
函数来访问当前迭代的索引。
enumerate函数接受一个可迭代对象并返回一个包含元组的枚举对象,其中第一个元素是索引,第二个元素是相应的项目。
my_list = ['bobby', 'hadz', 'com'] for index, item in enumerate(my_list): print(index, item) # 👉️ 0 bobby, 1 hadz, 2 com
检查一个值是否存在于字典列表中使用filter
您还可以使用该filter()
函数来检查某个值是否存在于字典列表中。
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] matching_dicts = list( filter( lambda x: x.get('name') == 'bobby', list_of_dicts ) ) # [{'id': 2, 'name': 'bobby', 'salary': 101}] print(matching_dicts) if len(matching_dicts) > 0: print('The value exists in the list of dictionaries')
filter函数接受一个函数和一个可迭代对象作为参数,并从可迭代对象的元素构造一个迭代器,函数返回一个真值。
我们传递给的 lambda 函数filter()
被列表中的每个字典调用。
该函数获取name
字典的属性并将其与给定值进行比较。
如果满足条件,则字典包含在对象中filter
。
最后一步是检查变量的长度是否大于0
。
如果是,则至少有一本字典具有指定值。
检查一个值是否存在于字典列表中使用map
您还可以使用该map()
函数来检查某个值是否存在于字典列表中。
from operator import itemgetter list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] if 'bobby' in map(itemgetter('name'), list_of_dicts): # 👇️ this runs print('The value is in the dictionary') else: print('The value is NOT in the dictionary')
map ()函数将一个函数和一个可迭代对象作为参数,并使用可迭代对象的每个项目调用该函数。
operator.itemgetter
类返回一个可调用对象,该对象在指定的索引或键处
获取项目。
例如,x = itemgetter('name')
然后调用x(my_dict)
,返回
my_dict['name']
。
from operator import itemgetter list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] # 👇️ ['alice', 'bobby', 'carl'] print(list(map(itemgetter('name'), list_of_dicts)))
最后一步是使用in
运算符检查给定值是否包含在列表中。
我还写了一篇关于
如何过滤字典列表的文章。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: